描述
原文檔地址:https://docs.npmjs.com/misc/scope
所有npm模塊都有name,有的模塊的name還有scope。scope的命名規則和name差不多,同樣不能有url非法字符或者下划線點符號開頭。scope在模塊name中使用時,以@開頭,后邊跟一個/ 。package.json中,name的寫法如下:
@somescope/somepackagename
scope是一種把相關的模塊組織到一起的一種方式,也會在某些地方影響npm對模塊的處理。
npm公共倉庫支持帶有scope的的模塊,同時npm客戶端對沒有scope的模塊也是向后兼容的,所以可以同時使用兩者。
安裝帶有scope的模塊
帶有scope的模塊安裝在一個子目錄中,如果正常的模塊安裝在node_modules/packagename目錄下,那么帶有scope的模塊安裝在node_modules/@myorg/packagename目錄下,@myorg就是scope前面加上了@符號,一個scope中可以包含很多個模塊。
安裝一個帶有scope的模塊:
npm install @myorg/mypackage
在package.json中寫明一個依賴:
"dependencies": {
"@myorg/mypackage": "^1.3.0"
}
如果@符號被省略,那么npm會嘗試從github中安裝模塊,在npm install命令的文檔中有說明 https://docs.npmjs.com/cli/install
require帶有scope的模塊
在代碼中require一個含有scope的模塊:
require('@myorg/mypackage')
nodejs在解析socpe模塊的時候,並沒有把它當做一個有什么蹊蹺的東西來處理,僅僅是按照路徑去找@myorg目錄下的mypackage模塊。
發布帶有scope的模塊
帶有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和一個倉庫關聯
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配置的倉庫。
相關文檔
本文轉自我的個人網站,原文地址,歡迎前往交流討論