【问题标题】:What is the meaning of the "at" (@) prefix on npm packages?npm 包上的“at”(@)前缀是什么意思?
【发布时间】:2017-04-01 06:48:36
【问题描述】:

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 这是一个很好的答案! (不应该是评论。)

标签: javascript angular npm


【解决方案1】:

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

这很有用有几个原因:

  • 它允许组织明确哪些软件包是“官方的”,哪些不是。
    • 例如,如果一个包的范围为@angular,那么您就知道它是由 Angular 核心团队发布的。
  • 包名只需要在它发布的范围内是唯一的,而不是整个注册表。
    • 例如,包名 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!

【讨论】:

    【解决方案2】:

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

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

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

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

    npm install @myorg/mypackage
    

    另见

    【讨论】:

      【解决方案3】:

      @ 根据它在 npm 包名称中的位置而具有不同的含义,即 一个包是: 一种)。包含由 package.json 文件描述的程序的文件夹

      b)。包含 (a) 的 gzip 压缩包

      c)。解析为 (b) 的 url

      d)。使用 (c) 在注册表上发布的 @

      e)。 @ 指向 (d)

      f)。具有满足 (e) 的“最新”标签的 A

      g)。 A 解析为 (a)

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

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

      npm install [/] @
      安装指定标签引用的包的版本。如果该包的注册表数据中不存在该标记,则此操作将失败。 示例:

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

      npm install [/]@
      安装指定版本的包。如果版本尚未发布到注册表,这将失败。 示例:

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

      npm install [/]@
      安装与指定版本范围匹配的软件包版本。 示例:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多