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

Angular组件路由器文档中,我无意中发现了一个我从未见过的npm命令,我不明白发生了什么:

npm install @angular/router --save

@angular/router是什么意思?

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

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

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

88449 次浏览

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

这很有用,原因如下:

    它允许组织明确哪些包是“官方的”,哪些不是。
    • 例如,如果一个包的作用域是@angular,你就知道它是由Angular核心团队发布的。
    • 李< / ul > < / >
    • 包名只需要对发布它的作用域惟一,而不是对整个注册表惟一。
      • 例如,包名http已经在主存储库中使用了,但Angular也可以使用@angular/http
      • 李< / ul > < / >

      之所以使用作用域包不会在公共搜索中显示,是因为其中很多都是由使用NPM付费服务的组织创建的私有包,他们不愿意打开搜索,直到他们完全确定他们不会公开任何不应该公开的东西——从法律的角度来看,这是可以理解的。

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

      公共作用域包现在显示正确的搜索! . 公共作用域包现在显示正确的搜索!

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

  • 全局模块——这些模块遵循现有的命名约定。你require('foo')和有很多快乐。它们由一个或多个用户通过npm install XYZ命令拥有。

  • 作用域模块——这些是在组织名称下“作用域”的新模块,组织名称以@开头,一个斜杠,最后是包名,例如@someOrgScope/packagename。作用域是一种将相关包分组在一起的方式,也会影响npm处理包的方式。

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

npm install @myorg/mypackage

另请参阅

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

一个包是:

  1. 包含由package.json文件描述的程序的文件夹。
  2. 包含(1)的压缩tarball。
  3. 解析为(2)的url。
  4. 与(3)一起发布在注册表上的<name>@<version>
  5. 指向(4)的<name>@<tag>
  6. <name>有一个“latest”标签满足(5)。
  7. 解析为(1)的<git remote url>

NPM install [<@scope>/]<name>

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

注意:如果你的作用域名称中没有包含# eyz0符号,npm会将其解释为GitHub存储库,如下所示。作用域名称后面也必须跟一个斜杠。

npm安装[& lt; @scope> /] & lt; name> @< tag>

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

例子:

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

NPM install [<@scope>/]<name>

安装指定版本的软件包。如果版本尚未发布到注册中心,则此操作将失败。

例子:

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

NPM install [<@scope>/]<name>@<

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

例子:

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

什么是作用域模块。

所有的npm包都有一个名称,并且这些名称应该是唯一的。限定作用域的npm包遵循与其他npm包名称相同的规则(url安全字符,下划线或没有前导点)。当在包名中使用时,作用域前面有一个@符号,后面跟着一个斜杠/,例如:

@somescope/somepackagename

npm作用域的模块通常将相关的npm包分组在一起。当你注册一个npm用户帐户或创建一个组织。每个npm用户/组织都有自己的作用域,只有他们和他们的员工可以在你的作用域中添加包。通常授予您一个与您的用户或组织名称匹配的范围。您可以使用此作用域作为相关包的名称空间。

作为一个npm用户,你不必担心别人在你之前取你的包名。因此,使用作用域模块也是组织npm包的好方法。

# EYZ0:

  • 作用域包允许组织管理私有包。
  • Scoped包的名称只需要对发布它的作用域惟一,而不是对整个npm注册表惟一。

通常,组织选择保持他们的作用域包私有,并且由于各种原因他们不会出现在公共搜索中。