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

2022-08-29 23:02:41

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

npm install @angular/router --save

这是什么意思?@angular/router

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

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

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


答案 1

这是 NPM 的一项新功能,称为“作用域包”,它有效地允许 NPM 包被命名空间化。NPM 上的每个用户和组织都有自己的作用域,他们是唯一可以向其添加包的人员。

这很有用,原因如下:

  • 它允许组织明确哪些软件包是“官方的”,哪些不是。
    • 例如,如果一个包具有范围,您就知道它是由Angular核心团队发布的。@angular
  • 包名称只需在发布它的作用域中是唯一的,而不是整个注册表。
    • 例如,包名称已经在主存储库中使用,但Angular也能够拥有。http@angular/http

范围包没有出现在公共搜索中的原因是,其中很多都是由使用NPM付费服务的组织创建的私有包,并且他们不愿意打开搜索,直到他们可以完全确定他们不会公开任何不应该公开的东西 - 从法律角度来看, 这是完全可以理解的。

有关更多信息,请参阅 NPM 文档Angular 文档

编辑:现在看来,公共范围的包在搜索中可以正确显示!


答案 2

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

  • 全局模块 - 这些是遵循当今存在的命名约定的模块。你和有很多喜乐。它们通过命令由一个或多个人拥有。require('foo')npm install XYZ

  • 作用域模块 - 这些是新模块,在组织名称下“限定”,组织名称以组织名称,斜杠和最后以包名称开头,例如。作用域是将相关包组合在一起的一种方式,并且还会影响有关 npm 处理包的方式的一些方面。@@someOrgScope/packagename

在 npm 安装中,通过按名称引用作用域包(前面带有 @符号)来安装作用域包:

npm install @myorg/mypackage

另请参见