理解nodejs模塊的scope


描述

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

相關文檔

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM