理解nodejs模組的scope

桃子夭夭發表於2016-02-18

描述

原文件地址: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配置的倉庫。

相關文件

本文轉自我的個人網站,原文地址,歡迎前往交流討論

相關文章