NPM 包名称作用域/scope的详细解读
说明
所有 npm 软件包都有一个名称。
某些软件包名称也有作用域。
范围遵循包名称的常用规则(URL 安全字符,无前导点或下划线)。在软件包名称中使用时,作用域前面带有@符号,后面带有斜杠,例如
@somescope/somepackagename
范围是将相关软件包组合在一起的一种方式,并且还会影响 npm 处理软件包的方式。
每个 npm 用户/组织都有自己的范围,只有您可以在自己的范围内添加软件包。
这意味着您不必担心有人会在您之前使用您的包名称。
因此,这也是向组织发出正式文件包的好方法。
有作用域的软件包可以从npm@2npm
主注册表开始发布和安装。无作用域的程序包可以取决于作用域程序包,反之亦然。
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 处理范围文件夹的方式没有什么特别的。这仅需要 mypackage 名为的文件夹中的模块@myorg。
发布作用域包
范围包可以从 CLI 开始发布,npm@2 并且可以发布到支持它们的任何注册表,包括主要 npm 注册表。
(自 2015 年 4 月 19 日起,在 npm 2.0 或更高版本中,主要 npm 注册表 确实支持作用域软件包。)
如果您愿意,可以将范围与注册表关联。见下文。
将公共范围的程序包发布到主要的 npm 注册表
要发布公共范围的程序包,必须指定--access public
初始发布。这将发布程序包,并设置对 public 您的访问权限,就好像您npm access public
在发布后运行了该程序包一样。
将私有范围的程序包发布到 npm 注册表
要将私有范围的程序包发布到 npm 注册表,您必须具有 npm 私有模块 帐户。
然后,您可以使用npm publish
或来发布模块npm publish --access restricted
,并且该模块将出现在 npm 注册表中,并且具有受限访问权限。然后,您可以根据需要npm access
通过 npmjs.com 网站或在 npmjs.com 网站上更改访问权限。
将范围与注册表关联
范围可以与单独的注册表关联。
这使您可以无缝地混合使用主要 npm 注册表和一个或多个私有注册表(例如 npm Enterprise)中的软件包。
您可以在登录时将范围与注册表关联,例如
npm login --registry=http://reg.example.com --scope=@myco
范围与注册表具有多对一的关系:一个注册表可以托管多个范围,但是一个范围只能指向一个注册表。
您还可以使用npm config
以下方式将作用域与注册表关联:
npm config set @myco:registry http://reg.example.com
将范围与注册表关联后,npm install
具有该范围的软件包的任何内容都将向该注册表请求软件包。任何 npm publish
一个包含范围包名称将被发布到注册表来代替。