首页 文章

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

提问于
浏览
145

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中是某种前缀机制吗?它是如何工作的?

2 回答

  • 37

    这是NPM的一个新功能,称为“范围包”,它有效地允许NPM包命名 . NPM上的每个用户和组织都有自己的范围,他们是唯一可以向其添加包的人 .

    由于以下几个原因,这很有用:

    • 它允许组织明确哪些包是'official'哪些包不是'official' .

    • 例如,如果包的范围为 @angular ,则您知道它是由Angular核心团队发布的 .

    • 包名称只对其发布的范围是唯一的,而不是整个注册表 .

    • 例如,包名称 http 已在主存储库中获取,但Angular也可以具有 @angular/http .

    之所以scoped packages don't show up in public search是因为他们中的很多都是由使用NPM的组织创建的私有包's paid services, and they'不习惯开放搜索,直到他们完全确定他们是公开的 - 从法律角度来看,这是非常可以理解的 .

    有关更多信息,请参阅NPM docsAngular docs .

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

  • 155

    基本上有两种类型的npm模块 -

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

    • 范围模块 - 这些是组织名称下的"scoped"新模块,以 @ 开头,后跟斜杠,例如 @somescope/somepackagename . 范围是一种将相关包分组在一起的方式,也会影响npm处理包的方式 .

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

    npm install @myorg/mypackage
    

    也可以看看

相关问题