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一个包含范围包名称将被发布到注册表来代替。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了