目录
scope
选择 CLI 版本
目录
描述
所有 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-04-19,并且使用 npm 2.0 或更高版本,主 npm 注册表 **确实** 支持作用域包。)
如果您愿意,可以将作用域与注册表关联;请参见下文。
将公共作用域包发布到主 npm 注册表
发布到作用域,您有两个选择
- 发布到您的用户作用域(示例:
@username/module
) - 发布到组织作用域(示例:
@org/module
)
如果将公共模块发布到组织作用域,您必须首先创建您想要发布到的作用域名称的组织,或者被添加到具有相应权限的现有组织中。例如,如果您想发布到 @org
,您需要在 npmjs.com 上创建 org
组织,然后再尝试发布。
作用域包默认情况下不是公开的。您需要在使用初始 npm publish
命令时指定 --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
命令都会发布到该注册表。