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


293

Angular Component Router文档中我偶然遇到了一个从未见过的npm命令,我不知道发生了什么:

npm install @angular/router --save

的意义是什么 @angular/router

整个字符串是包名吗?但是当我在npmjs.com上使用搜索时,找不到该包。命令行搜索也不会返回任何此类包:

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

那么@angular/npm中的某种前缀机制呢?以及它如何运作?


7
npm help scope
斜杠'18年

3
@trailingslash这是一个很好的答案!(不应发表评论。)
有限赎罪

Answers:


323

这是NPM的一项新功能,称为“作用域软件包”,可有效地使NPM软件包具有名称空间。NPM上的每个用户和组织都有自己的范围,并且是唯一可以向其中添加软件包的人。

这很有用,原因如下:

  • 它使组织可以明确哪些软件包是“官方”软件包,哪些软件包不是“官方”软件包。
    • 例如,如果一个包具有作用域@angular,则您知道它是由Angular核心团队发布的。
  • 程序包名称仅对于发布的范围是唯一的,而不是整个注册表。
    • 例如,包名称http已在主存储库中获取,但是Angular也可以使用@angular/http

其原因范围的包不要在公共场所搜索显示出来是因为他们中的很多都是通过NPM的支付服务组织创建的私有包,而且他们不舒服开放搜索,直到他们可以完全肯定他们是不是将会公开任何不应该公开的东西-从法律的角度来看,这是可以理解的。

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

编辑:似乎公共范围的软件包现在可以正确显示在搜索中!


68

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

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

  • 作用域模块-这些是新的模块,它们以组织名称“范围”在组织名称下,组织名称以@组织名称,斜杠和程序包名称开头,例如@someOrgScope/packagename。范围是将相关软件包组合在一起的一种方式,并且还会影响npm处理软件包的方式。

在npm install中,通过按名称引用作用域的软件包来安装该作用域的软件包,其后带有@符号。

npm install @myorg/mypackage

也可以看看

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.