scope
范围包Table of contents
描述
所有 npm 包都有一个名称。 一些包名也有范围。 范围遵循包名称的通常规则(URL 安全字符,没有前导点或下划线)。 在包名中使用时,作用域前面有一个 @
符号,后面是一个斜杠,例如
@somescope/somepackagename
范围是一种将相关包组合在一起的方式,也影响 npm 处理包的方式的一些事情。
每个 npm 用户/组织都有自己的范围,只有你可以在你的范围内添加包。 这意味着你不必担心有人抢先你的包名称。 因此,这也是向组织发出官方包信号的好方法。
范围包可以从 npm@2
开始发布和安装,并且受主 npm 注册表支持。 无范围包可以依赖于范围包,反之亦然。 npm 客户端向后兼容无范围注册表,因此它可以同时用于作用域和无范围注册表。
安装范围包
范围包安装到常规安装文件夹的子文件夹,例如如果你的其他包安装在 node_modules/packagename
中,则作用域模块将安装在 node_modules/@myorg/packagename
中。 作用域文件夹 (@myorg
) 只是作用域的名称,前面有一个 @
符号,可以包含任意数量的范围包。
范围包是通过在 npm install
中按名称引用它来安装的,前面有一个 @
符号:
npm install @myorg/mypackage
或者在 package.json
中:
"dependencies": {"@myorg/mypackage": "^1.3.0"}
请注意,如果省略 @
符号,无论哪种情况,npm 都会尝试从 GitHub 安装; 见 npm install
。
需要范围包
因为范围包安装到作用域文件夹中,所以在代码中需要它们时必须包含作用域的名称,例如
require('@myorg/mypackage')
Node 处理作用域文件夹的方式并没有什么特别之处。 这仅需要名为 @myorg
的文件夹中的 mypackage
模块。
发布范围包
范围包可以从 npm@2
的 CLI 发布,并且可以发布到任何支持它们的注册表,包括主 npm 注册表。
(截至 2015 年 4 月 19 日,使用 npm 2.0 或更高版本,主要的 npm 注册表 does 支持范围包。)
如果愿意,你可以将范围与注册表相关联; 见下文。
将公共范围的包发布到主 npm 注册表
要发布公共范围的包,你必须在初始发布时指定 --access public
。 这将发布包并设置对 public
的访问权限,就像你在发布后运行 npm access public
一样。
将私有范围包发布到 npm 注册表
要将私有范围包发布到 npm 注册表,你必须拥有 npm 私有模块 账户。
然后,你可以使用 npm publish
或 npm publish
--access restricted
发布模块,它将出现在 npm 注册表中,但访问受限。 然后,如果需要,你可以使用 npm access
或在 npmjs.com 网站上更改访问权限。
将范围与注册表关联
范围可以与单独的注册表相关联。 这使你可以无缝地混合使用来自主要 npm 注册表和一个或多个私有注册表(例如 GitHub Packages 或开源 Verdaccio 项目)的包。
你可以在登录时将范围与注册表关联,例如
npm login --registry=http://reg.example.com --scope=@myco
范围与注册表具有多对一的关系: 一个注册表可以托管多个范围,但一个范围只能指向一个注册表。
你还可以使用 npm config
将范围与注册表关联:
npm config set @myco:registry http://reg.example.com
一旦范围与注册表相关联,具有该范围的包的任何 npm install
都将改为从该注册表请求包。 包含范围的包名称的任何 npm publish
将改为发布到该注册表。