所有npm模塊都有name,有的模塊的name還有scope梦谜。scope的命名規(guī)則和name差不多,同樣不能有url非法字符或者下劃線點符號開頭唁桩。scope在模塊name中使用時,以@開頭报辱,后邊跟一個/ 单山。package.json中,name的寫法如下:
"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
使用帶有scope的模塊
在代碼中require一個含有scope的模塊:
require(‘@myorg/mypackage’)
nodejs在解析socpe模塊的時候,并沒有把它當做一個有什么蹊蹺的東西來處理恬吕,僅僅是按照路徑去找@myorg目錄下的mypackage模塊。
發(fā)布帶有scope的模塊
帶有scope的模塊可以被發(fā)布到任意支持socpe模塊的npm倉庫渐裂,包括npm公共倉庫,公共倉庫從2015-04-19就開始支持帶有scope的模塊了柒凉。
如果有必要,可以把某個scope關聯到某個倉庫坦刀,見下面的說明蔬咬。
如果要發(fā)布一個公共socpe模塊,你必須在最開始發(fā)布的時候指定–access public
林艘。這樣會讓模塊能被公開使用,就像在publish之后運行了 npm access public
命令一樣卜朗。
如果要發(fā)布私有模塊咕村,那么你必須有一個npm私有模塊賬戶,可以選擇自己搭建一個npm服務懈涛,或者直接使用官方的泳猬。發(fā)布私有模塊的命令:
npm publish
# 或者
npm publish –access restricted
即發(fā)布socpe模塊時,默認就是restricted
的埋心。這些在npm publish文檔里邊可以看到詳細說明。 https://docs.npmjs.com/cli/publish
將一個scope和一個倉庫關聯
scope可以和一些自己搞的npm倉庫關聯起來拷呆。這樣你就可以同時使用npm公共倉庫和一些其他的私有倉庫中的模塊疫粥,例如企業(yè)npm」4可以用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配置的倉庫,發(fā)布的時候也是同樣的道理咒吐,會發(fā)布到它關聯的倉庫而不是npm配置的倉庫属划。