在 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
这是 NPM 的一个新特性,称为“作用域包”,它有效地允许 NPM 包被命名空间。 NPM 上的每个用户和组织都有自己的范围,并且他们是唯一可以向其中添加包的人。
这很有用有几个原因:
它允许组织明确哪些软件包是“官方的”,哪些不是。例如,如果一个包的作用域为@angular,你就知道它是由 Angular 核心团队发布的。
例如,如果一个包的作用域为@angular,你就知道它是由 Angular 核心团队发布的。
包名只需要在它发布的范围内是唯一的,而不是整个注册表。例如,包名 http 已经在主存储库中使用,但 Angular 也可以拥有 @angular/http。
例如,包名 http 已经在主存储库中使用,但 Angular 也可以拥有 @angular/http。
scoped packages don't show up in public search 的原因是因为其中很多是由使用 NPM 付费服务的组织创建的私有包,并且在完全确定不会公开任何不应该公开的内容之前,他们不愿意打开搜索不要公开——从法律的角度来看,这是可以理解的。
有关详细信息,请参阅 NPM docs 和 Angular docs。
编辑:看来public scoped packages now show up properly in search!
npm 上基本上有两种类型的模块,它们是 -
全局模块 - 这些是遵循当今存在的命名约定的模块。你需要('foo')并且有很多高兴。它们由一个或多个人通过 npm install XYZ 命令拥有。
Scoped modules - 这些是新的模块,在以@组织名称、斜杠和最后的包名称开头的组织名称下“限定”,例如@someOrgScope/packagename。范围是一种将相关包组合在一起的方式,也影响 npm 处理包的方式的一些事情。
通过在 npm install 中按名称引用它来安装一个作用域包,前面是一个 @-symbol:
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) 的压缩 tarball。解析为 (2) 的 url。使用 (3) 在注册表上发布的
npm install [<@scope>/]<名称>
<scope>
是可选的。该包将从与指定范围关联的注册表中下载。如果没有注册表与给定范围关联,则假定为默认注册表。
注意:如果您的作用域名称中没有包含 @
符号,npm 会将其解释为 GitHub 存储库,请参见下文。范围名称后还必须跟一个斜杠。
npm install [<@scope>/]<名称>@<标签>
安装指定标签引用的包的版本。如果该包的注册表数据中不存在该标记,则此操作将失败。
例子:
npm install packagename@latest
npm install @myorg/mypackage@latest
npm install [<@scope>/]<名称>@<版本>
安装指定版本的包。如果版本尚未发布到注册表,这将失败。
例子:
npm install packagename@0.1.1
npm install @myorg/privatepackage@1.5.0
npm install [<@scope>/]<名称>@<版本范围>
安装与指定版本范围匹配的软件包版本。
例子:
npm install packagename@">=0.1.0 <0.2.0"
npm install @myorg/privatepackage@">=0.1.0 <0.2.0"
不定期副业成功案例分享