npm-scope
描述
所有的 npm packages 都有一个名字。一些 packages 名字也会有一个 scope ,scope 命名遵循普通 package 名字(URL-安全字符,不以 . 或 _ 开头),scope 中的 packages 使用时要以 @ 符开头,后面跟 / ,例如:
@somescope/somepackagename
npm-scope 是一种将一些互相有关联的包组合在一起的方式,同时 npm 处理这些 packages 的方式也不同。
每个 npm 用户/组织 都有自己的范围,只有你自己可以在你的 scope 中添加 packages ,这意味着你不用担心自己 packages 的名字跟别人冲突。因此,npm-scope 是一些组织发布官方 packages 最好的方式。
npm-scope 从 npm@2 开始支持。Unscoped packages 和 scoped packages 可以互相依赖。
安装 scoped packages
scoped packages 会被安装到二级文件夹中,例如,某个 Unscoped packages 被安装至 node_modules/packagename ,scoped packages 则会被安装至 node_modules/@myorg/packagename 。@myorg 是个文件夹,可以包含任意数量的 scoped packages 。
一个 scoped package 通过下面的命令安装:
npm install @myorg/mypackage
或者在 package.json 中:
"dependencies": {
"@myorg/mypackage": "^1.3.0"
}
注意:如果在安装 scoped packages 过程中省略 @ 符号,npm 将尝试从 GitHub 中安装。
引入 scoped packages
由于 scoped packages 被安装在一个 scope 文件夹中,所以你在代码中引用它时,需要包含 scope 的名字,例如:
require('@myorg/mypackage')
发布 scoped packages
从 npm@2(2015-04-19) 开始,scoped packages 就可以被发布到 任何 registry 中。
你也可以将 scope 和某个 registry 进行关联,见下文。
将 public scoped packages 发布至 npm registry
npm publish @myorg/mypackage --access public
将 private scoped packages 发布至 npm registry
要将 private scoped packages 发布到 npm registry ,你必须先拥有一个 npm Private Modules (私有模块)的账户。
然后你可以 用 npm publish
或者 npm publish --access restricted
发布 scoped packages ,发布后的 scoped package 将出现在 npm registry 中,但是时受限的。你可以在 npmjs.com website 或者 使用 npm access
改变权限。
将一个 scope 和 一个 registry 关联
scope 可以和 单独的 registry 相关联。这允许你无缝地使用一个混合私有 registry 和 npm registry 的 package 。
你可以在登录时将 scope 和 一个 registry 关联,例如:
npm login --registry=http://reg.example.com --scope=@myco
一个 registry 可以有多个 scope ,但是一个 scope 只能关联一个 registry 。
你也可以使用 npm config 将一个 scope 和 一个 registry 进行关联:
npm config set @myco:registry http://reg.example.com
一旦 scope 与 registry 相关联,scope下的 packages 在这个 registry 中请求请求下载。同时也会被发布到这个 registry 中。