Scoped Packages 域級包
在 npm 的包管理系統(tǒng)中紊遵,有一種 scoped packages 機制停巷,用于將一些 packages 以 @scope/package
的命名形式集中在一個命名空間下面,實現(xiàn)域級的包管理侥啤。
這就是我們看到的諸如 @angular/core
沾谓、@angular/router
漏设、@r/horse
等 package 的存在形態(tài)荚坞。
那么如何創(chuàng)建和管理這種域級包(其實是小生自己譯的名兒挑宠,不喜勿怪,嘻嘻)呢颓影。Steps steps go~
在 npm 項目中設(shè)置 scope
npm 會在用戶注冊賬號的時候為其自動創(chuàng)建一個與用戶名同名的 scope各淀,之后用戶也可以創(chuàng)建其他的 Org 作為 scope。
下面以用戶獨有的作用域為例:
$ mkdir scoped-packages-demo && cd scoped-packages-demo
# 這里是小生的 npm 用戶名
$ npm init --scoped=shockw4ver
然后一頓回車搞定初始化(或者直接加 -y
參數(shù)~)诡挂,當(dāng)然你也可以精致的填好每一個信息碎浇,方便回顧~
操作 scope
初始化成功以后,package.json
文件中的 name
值為 @shockw4ver/scoped-packages-demo
璃俗,即這個包是位于 shockw4ver
命名空間下的 scoped-packages-demo
奴璃。
如果你想一直在這個 scope 下開發(fā) npm 包,可以運行全局的 npm 配置命令進(jìn)行設(shè)置:
$ npm config set scope shockw4ver
此時運行 npm config list
城豁,可以看到:
; cli configs
metrics-registry = "https://registry.npmjs.org/"
scope = "@shockw4ver"
user-agent = "npm/5.5.1 node/v8.9.3 darwin x64"
; userconfig /Users/zhangyongchao/.npmrc
//registry.npm.taobao.org/:always-auth = false
//registry.npm.taobao.org/:email = "asambojur@live.cn"
//registry.npm.taobao.org/:username = "shockw4ver"
@asambojur:registry = "https://registry.npmjs.org/"
registry = "https://registry.npmjs.org/"
; node bin location = /usr/local/bin/node
; cwd = /Users/zhangyongchao/Desktop/Samuel/demos
; HOME = /Users/zhangyongchao
; "npm config ls -l" to show all defaults.
這是已經(jīng)將 scope 寫到了 .npmrc 中去苟穆,作為全局的 npm 配置。
發(fā)布 scoped package
scoped package 的發(fā)布與普通 package 的發(fā)布幾乎沒有區(qū)別,只是需要注意設(shè)置權(quán)限:
$ npm adduser
Username: shockw4ver
Password:
Email: (this IS public) asambojur@live.cn
Logged in as shockw4ver to scope @asambojur on https://registry.npmjs.org/.
$ npm publish --access=public
# 這里需將訪問權(quán)限設(shè)置為 public鞭缭,否則它默認(rèn)是發(fā)布一個 private module剖膳,這是為一個有償服務(wù)魏颓,需要成為“paid user”岭辣。
稍等片刻:
+ @shockw4ver/scoped-packages-demo@1.0.0
這便是發(fā)布成功了,嘿嘿~
合作開發(fā)
合作開發(fā)和普通包就更沒區(qū)別~
owner 只需將合作者添加到 collaborator 即可~
當(dāng)然了甸饱,之前應(yīng)當(dāng)先用版本管理工具做好同步沦童,確保每次發(fā)布版本號不重復(fù)。
Private Modules
這里贅述一下 Private Modules 吧~
它是 npm 提供的私有模塊服務(wù)叹话,類似于 github 的 private repository偷遗。
當(dāng)你的命名空間下的代碼不想公開而又希望用 npm 進(jìn)行管理的時候,可以有償?shù)氖褂眠@個服務(wù)驼壶。
官方描述:
When you sign up for private modules as an individual user, your scope is your username. If you create an npm Org, the orgname can be the scope. Orgs can be free or paid. Using a public Org is the only free way to use scopes in package names
也就是說氏豌,個人用戶名或 Org 都可以成為你的 scope,而 Orgs 可以是付費或者免費的热凹,其中免費 Org 是通過包名使用 scope 的唯一途徑