看这样一条命令:

npm install @angular/router --save

这个 @angular/router 代表什么含意?

咱们应用上面的命令,无奈搜寻到这个包:

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

这是 NPM 的一个新个性,称为“作用域包”,它无效地容许 NPM 包被命名空间。 NPM 上的每个用户和组织都有本人的范畴,他们是惟一能够向其中增加包的人。

这很有用,起因有几个:

  • 它容许组织明确哪些软件包是“官网的”,哪些不是。
    例如,如果一个包的范畴为 @angular,你就晓得它是由 Angular 外围团队公布的。
  • 包名只须要在它公布的范畴内是惟一的,而不是整个注册表。
    例如,主存储库中曾经采纳了包名称 http,但 Angular 也能够应用 @angular/http。

范畴包没有呈现在公共搜寻中的起因是因为它们中的很多是由应用 NPM 付费服务的组织创立的公有包,并且他们不违心关上搜寻,直到他们齐全确定他们不是将不应该公开的任何内容公开 - 从法律角度来看,这是能够了解的。

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

(1) 全局模块 - 这些模块遵循当今存在的命名约定。 您须要('foo')并且非常高兴。 它们由一个或多集体通过 npm install XYZ 命令领有。

(2) 作用域模块 - 这些是在组织名称下“作用域”的新模块,该组织名称以 @ 组织名称、斜杠和包名结尾,例如 @someOrgScope/包名。 作用域是将相干包组合在一起的一种形式,也会影响 npm 解决包的形式。

作用域包是通过在 npm install 中通过名称援用它来装置的,后面是 @-symbol:

npm install @myorg/mypackage
作用域是将相干包组合在一起的一种形式,也会影响 npm 解决包的形式。 每个 npm 用户/组织都有本人的范畴,只有您能够在您的范畴内增加包。 这意味着您不用放心有人在您之前拿走您的包裹名称。 因而,这也是向组织收回官网软件包信号的好办法。

SAP Spartacus 也应用了大量的 scoped module,如下图所示: