npm-scope
描述
所有的 npm packages 都有一個(gè)名字。一些 packages 名字也會(huì)有一個(gè) scope ,scope 命名遵循普通 package 名字(URL-安全字符,不以 . 或 _ 開頭),scope 中的 packages 使用時(shí)要以 @ 符開頭,后面跟 / ,例如:
@somescope/somepackagename
npm-scope 是一種將一些互相有關(guān)聯(lián)的包組合在一起的方式,同時(shí) npm 處理這些 packages 的方式也不同。
每個(gè) npm 用戶/組織 都有自己的范圍,只有你自己可以在你的 scope 中添加 packages ,這意味著你不用擔(dān)心自己 packages 的名字跟別人沖突。因此,npm-scope 是一些組織發(fā)布官方 packages 最好的方式。
npm-scope 從 npm@2 開始支持。Unscoped packages 和 scoped packages 可以互相依賴。
安裝 scoped packages
scoped packages 會(huì)被安裝到二級(jí)文件夾中,例如,某個(gè) Unscoped packages 被安裝至 node_modules/packagename ,scoped packages 則會(huì)被安裝至 node_modules/@myorg/packagename 。@myorg 是個(gè)文件夾,可以包含任意數(shù)量的 scoped packages 。
一個(gè) scoped package 通過(guò)下面的命令安裝:
npm install @myorg/mypackage
或者在 package.json 中:
"dependencies": {
"@myorg/mypackage": "^1.3.0"
}
注意:如果在安裝 scoped packages 過(guò)程中省略 @ 符號(hào),npm 將嘗試從 GitHub 中安裝。
引入 scoped packages
由于 scoped packages 被安裝在一個(gè) scope 文件夾中,所以你在代碼中引用它時(shí),需要包含 scope 的名字,例如:
require('@myorg/mypackage')
發(fā)布 scoped packages
從 npm@2(2015-04-19) 開始,scoped packages 就可以被發(fā)布到 任何 registry 中。
你也可以將 scope 和某個(gè) registry 進(jìn)行關(guān)聯(lián),見下文。
將 public scoped packages 發(fā)布至 npm registry
npm publish @myorg/mypackage --access public
將 private scoped packages 發(fā)布至 npm registry
要將 private scoped packages 發(fā)布到 npm registry ,你必須先擁有一個(gè) npm Private Modules (私有模塊)的賬戶。
然后你可以 用 npm publish 或者 npm publish --access restricted 發(fā)布 scoped packages ,發(fā)布后的 scoped package 將出現(xiàn)在 npm registry 中,但是時(shí)受限的。你可以在 npmjs.com website 或者 使用 npm access 改變權(quán)限。
將一個(gè) scope 和 一個(gè) registry 關(guān)聯(lián)
scope 可以和 單獨(dú)的 registry 相關(guān)聯(lián)。這允許你無(wú)縫地使用一個(gè)混合私有 registry 和 npm registry 的 package 。
你可以在登錄時(shí)將 scope 和 一個(gè) registry 關(guān)聯(lián),例如:
npm login --registry=http://reg.example.com --scope=@myco
一個(gè) registry 可以有多個(gè) scope ,但是一個(gè) scope 只能關(guān)聯(lián)一個(gè) registry 。
你也可以使用 npm config 將一個(gè) scope 和 一個(gè) registry 進(jìn)行關(guān)聯(lián):
npm config set @myco:registry http://reg.example.com
一旦 scope 與 registry 相關(guān)聯(lián),scope下的 packages 在這個(gè) registry 中請(qǐng)求請(qǐng)求下載。同時(shí)也會(huì)被發(fā)布到這個(gè) registry 中。