原文檔地址:https://docs.npmjs.com/misc/scopenode
全部npm模塊都有name,有的模塊的name還有scope。scope的命名規則和name差很少,一樣不能有url非法字符或者下劃線點符號開頭。scope在模塊name中使用時,以@開頭,後邊跟一個/ 。package.json中,name的寫法以下:git
@somescope/somepackagenamegithub
scope是一種把相關的模塊組織到一塊兒的一種方式,也會在某些地方影響npm對模塊的處理。npm
npm公共倉庫支持帶有scope的的模塊,同時npm客戶端對沒有scope的模塊也是向後兼容的,因此能夠同時使用二者。json
帶有scope的模塊安裝在一個子目錄中,若是正常的模塊安裝在node_modules/packagename目錄下,那麼帶有scope的模塊安裝在node_modules/@myorg/packagename目錄下,@myorg就是scope前面加上了@符號,一個scope中能夠包含不少個模塊。網站
安裝一個帶有scope的模塊:ui
npm install @myorg/mypackageurl
在package.json中寫明一個依賴:rest
"dependencies": {
"@myorg/mypackage": "^1.3.0"
}blog
若是@符號被省略,那麼npm會嘗試從github中安裝模塊,在npm install命令的文檔中有說明 https://docs.npmjs.com/cli/install
在代碼中require一個含有scope的模塊:
require('@myorg/mypackage')
nodejs在解析socpe模塊的時候,並無把它當作一個有什麼蹊蹺的東西來處理,僅僅是按照路徑去找@myorg目錄下的mypackage模塊。
帶有scope的模塊能夠被髮布到任意支持socpe模塊的npm倉庫,包括npm公共倉庫,公共倉庫從2015-04-19就開始支持帶有scope的模塊了。
若是有必要,能夠把某個scope關聯到某個倉庫,見下面的說明。
若是要發佈一個公共socpe模塊,你必須在最開始發佈的時候指定--access public。這樣會讓模塊能被公開使用,就像在publish以後運行了 npm access public命令同樣。
若是要發佈私有模塊,那麼你必須有一個npm私有模塊帳戶,能夠選擇本身搭建一個npm服務,或者直接使用官方的,官方的須要支付7刀/月。
發佈私有模塊的命令:
npm publish
或者
npm publish --access restricted 。
即發佈socpe模塊時,默認就是restricted的。
這些在npm publish文檔裏邊能夠看到詳細說明。 https://docs.npmjs.com/cli/publish
scope能夠和一些本身搞的npm倉庫關聯起來。這樣你就能夠同時使用npm公共倉庫和一些其餘的私有倉庫中的模塊,例如企業npm。
能夠用npm login把scope關聯到一個倉庫:
npm login --registry=http://reg.example.com --scope=@myco
scope和倉庫能夠是一個多對一的關係:一個倉庫裏邊能夠放多個scope,可是一個scope同時只能放在一個倉庫中。
也能夠用npm config把scope關聯到一個倉庫:
npm config set @myco:registry http://reg.example.com
當一個scope關聯到一個私有倉庫以後,該scope下的模塊在npm install的時候都會從它關聯的倉庫中獲取模塊,而不是npm配置的倉庫,發佈的時候也是一樣的道理,會發布到它關聯的倉庫而不是npm配置的倉庫。
本文轉自個人我的網站,原文地址,歡迎前往交流討論