ChatGPT解决这个技术问题 Extra ChatGPT

npm 包上的“at”(@)前缀是什么意思?

Angular Component Router documentation 中,我偶然发现了一个我以前从未见过的 npm 命令,我不明白发生了什么:

npm install @angular/router --save

@angular/router 是什么意思?

整个字符串是包名吗?但是,当我在 npmjs.com 上使用搜索时,我没有找到那个包。而且命令行搜索也没有返回这样的包:

npm search @angular/router
:No match found for "@angular/router"

那么 @angular/ 是 npm 中的某种前缀机制吗?它是如何工作的?

npm help scope
@trailingslash 这是一个很好的答案! (不应该是评论。)

S
Sean Ker

这是 NPM 的一个新特性,称为“作用域包”,它有效地允许 NPM 包被命名空间。 NPM 上的每个用户和组织都有自己的范围,并且他们是唯一可以向其中添加包的人。

这很有用有几个原因:

它允许组织明确哪些软件包是“官方的”,哪些不是。例如,如果一个包的作用域为@angular,你就知道它是由 Angular 核心团队发布的。

例如,如果一个包的作用域为@angular,你就知道它是由 Angular 核心团队发布的。

包名只需要在它发布的范围内是唯一的,而不是整个注册表。例如,包名 http 已经在主存储库中使用,但 Angular 也可以拥有 @angular/http。

例如,包名 http 已经在主存储库中使用,但 Angular 也可以拥有 @angular/http。

scoped packages don't show up in public search 的原因是因为其中很多是由使用 NPM 付费服务的组织创建的私有包,并且在完全确定不会公开任何不应该公开的内容之前,他们不愿意打开搜索不要公开——从法律的角度来看,这是可以理解的。

有关详细信息,请参阅 NPM docsAngular docs

编辑:看来public scoped packages now show up properly in search!


c
codejockie

npm 上基本上有两种类型的模块,它们是 -

全局模块 - 这些是遵循当今存在的命名约定的模块。你需要('foo')并且有很多高兴。它们由一个或多个人通过 npm install XYZ 命令拥有。

Scoped modules - 这些是新的模块,在以@组织名称、斜杠和最后的包名称开头的组织名称下“限定”,例如@someOrgScope/packagename。范围是一种将相关包组合在一起的方式,也影响 npm 处理包的方式的一些事情。

通过在 npm install 中按名称引用它来安装一个作用域包,前面是一个 @-symbol:

npm install @myorg/mypackage

也可以看看

http://blog.nodejitsu.com/a-summary-of-scoped-modules-in-npm/

https://docs.npmjs.com/misc/scope


H
Henry Ecker

@ 根据它在 npm 包名称中的位置有不同的含义。

一个包是:

包含由 package.json 文件描述的程序的文件夹。包含 (1) 的压缩 tarball。解析为 (2) 的 url。使用 (3) 在注册表上发布的 @。指向 (4) 的 @。具有满足 (5) 的“最新”标签的 。解析为 (1) 的

npm install [<@scope>/]<名称>

<scope> 是可选的。该包将从与指定范围关联的注册表中下载。如果没有注册表与给定范围关联,则假定为默认注册表。

注意:如果您的作用域名称中没有包含 @ 符号,npm 会将其解释为 GitHub 存储库,请参见下文。范围名称后还必须跟一个斜杠。

npm install [<@scope>/]<名称>@<标签>

安装指定标签引用的包的版本。如果该包的注册表数据中不存在该标记,则此操作将失败。

例子:

npm install packagename@latest
npm install @myorg/mypackage@latest

npm install [<@scope>/]<名称>@<版本>

安装指定版本的包。如果版本尚未发布到注册表,这将失败。

例子:

npm install packagename@0.1.1
npm install @myorg/privatepackage@1.5.0

npm install [<@scope>/]<名称>@<版本范围>

安装与指定版本范围匹配的软件包版本。

例子:

npm install packagename@">=0.1.0 <0.2.0"
npm install @myorg/privatepackage@">=0.1.0 <0.2.0"