“;在“;npm包上的(@)前缀
What is the meaning of the "at" (@) prefix on npm packages?
在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中的某种前缀机制吗?它是如何工作的?
这是NPM的一个新功能,称为"scoped packages",它有效地允许NPM包按名称命名。NPM上的每个用户和组织都有自己的范围,他们是唯一可以向其中添加包的人
这是有用的几个原因:
- 它允许组织明确哪些包是"官方的",哪些不是。
- 例如,如果一个包的作用域为
@angular
,那么您就知道它是由Angular核心团队发布的
- 例如,如果一个包的作用域为
- 包名称只需对其发布的作用域唯一,而不是对整个注册表唯一。
- 例如,包名称
http
已经在主存储库中使用,但Angular也可以使用@angular/http
- 例如,包名称
作用域包没有出现在公共搜索中的原因是,其中很多是由使用NPM付费服务的组织创建的私人包,在完全确定不会公开任何不应该公开的内容之前,他们不愿意打开搜索-从法律角度来看,这是可以理解的。
有关更多信息,请参阅NPM文档和Angular文档。
编辑:看来公共范围的包现在可以在搜索中正确显示了!
基本上npm上有两种类型的模块,它们是-
-
全局模块-这些模块遵循当今存在的命名约定。你
require('foo')
和有很多欢乐。它们由一个或多个人员通过npm install XYZ
命令拥有。 -
作用域模块-这些是在组织名称下"作用域"的新模块,该名称以
@
(组织名称)、斜线开始,最后是包名称(例如@someOrgScope/packagename
)。作用域是将相关包分组在一起的一种方式,也会影响npm处理包的方式。
在npm install:中,通过名称引用作用域软件包,并在其前面加上一个@符号来安装该程序包
npm install @myorg/mypackage
另请参见
http://blog.nodejitsu.com/a-summary-of-scoped-modules-in-npm/
https://docs.npmjs.com/misc/scope
@
根据其在npm包名称中的位置有不同的含义。
一个包裹是:
- 包含由
package.json
文件描述的程序的文件夹 - 一个包含(1)的带gzip的柏油球
- 解析为(2)的url
- 使用(3)在注册表上发布的
<name>@<version>
- 指向(4)的
<name>@<tag>
- 具有满足(5)的"最新"标签的
<name>
- 解析为(1)的
<git remote url>
npm安装[<@scope>/]<名称>
<scope>
是可选的。将从与指定作用域关联的注册表中下载该程序包。如果没有注册表与给定的作用域相关联,则假定为默认注册表。
注意:如果您的作用域名称中没有包含@
-符号,npm会将其解释为GitHub存储库,请参阅下文。作用域名称后面还必须跟一个斜线。
npm安装[<@scope>/]<名称><标签>
安装指定标记引用的包的版本。如果该包的注册表数据中不存在该标记,则此操作将失败。
示例:
npm install packagename@latest
npm install @myorg/mypackage@latest
npm安装[<@scope>/]<名称><版本>
安装指定版本的程序包。如果版本尚未发布到注册表,则此操作将失败。
示例:
npm install packagename@0.1.1
npm install @myorg/privatepackage@1.5.0
npm安装[<@scope>/]<名称><版本范围>
安装与指定版本范围匹配的程序包版本。
示例:
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用户,你不必担心有人会把你的包名抢在你前面。因此,使用scope模块也是组织npm包的好方法。
使用作用域包的优点:
- 作用域包允许组织管理私有包
- Scoped包名称只需对其发布所在的范围唯一,而不是对整个npm注册表唯一
通常,组织会选择将其作用域包保密,并且由于各种原因,它们不会出现在公共搜索中。
- 可以前端maven插件使用节点,npm已经安装
- 尽管链接成功并已成功下载,但未找到NPM模块
- 在Meteor项目中安装并包含npm模块后出错
- 如何将本地依赖项添加到npm项目中
- jQuery's trim()的前缀为not运算符
- 得到"TypeError:无法读取属性'filename'未定义的“;调用“npm start
- 部署时使用npm包时发生Meteor错误
- 在jquery中生成一个自动前缀编号
- 使用querySelectorAll为图像源添加前缀
- Sails.js:我可以将一些服务/模型打包为npm并在Sails.jss应用程序中加载npm吗
- 限制npm依赖模块's require(隔离)的用法
- 在Meteor Angular 1.3中使用npm模块
- 在Meteor中使用具有依赖关系的NPM包
- Node.js应用程序-由NPM启动时的不同Node_ENV
- npm警告包.jsonCrackingJS@0.0.1没有存储库字段
- Webpack通过npm将代码拆分为单独的模块,以及如何编译es6
- 如何在不安装npm的情况下一次性扩展对象
- Npm未满足对等依赖关系
- “;在“;npm包上的(@)前缀
- NPM在更改前缀后没有响应