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 publishnpm 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 命令都会发布到该注册表。

另请参阅