看這樣一條命令:
npm install @angular/router --save
這個 @angular/router 代表什么含義?
我們使用下面的命令,無法搜索到這個包:
npm search @angular/router
:No match found for "@angular/router"
這是 NPM 的一個新特性,稱為“作用域包”,它有效地允許 NPM 包被命名空間。 NPM 上的每個用戶和組織都有自己的范圍,他們是唯一可以向其中添加包的人。
這很有用,原因有幾個:
它允許組織明確哪些軟件包是“官方的”,哪些不是。
例如,如果一個包的范圍為 @angular,你就知道它是由 Angular 核心團隊發(fā)布的。- 包名只需要在它發(fā)布的范圍內(nèi)是唯一的,而不是整個注冊表。
例如,主存儲庫中已經(jīng)采用了包名稱 http,但 Angular 也可以使用 @angular/http。
范圍包沒有出現(xiàn)在公共搜索中的原因是因為它們中的很多是由使用 NPM 付費服務(wù)的組織創(chuàng)建的私有包,并且他們不愿意打開搜索,直到他們完全確定他們不是將不應(yīng)該公開的任何內(nèi)容公開 - 從法律角度來看,這是可以理解的。
npm 上基本上有兩種類型的模塊,它們是:
(1) 全局模塊 - 這些模塊遵循當今存在的命名約定。 您需要(foo)并且非常高興。 它們由一個或多個人通過 npm install XYZ 命令擁有。
(2) 作用域模塊 - 這些是在組織名稱下“作用域”的新模塊,該組織名稱以 @ 組織名稱、斜杠和包名開頭,例如 @someOrgScope/包名。 作用域是將相關(guān)包組合在一起的一種方式,也會影響 npm 處理包的方式。
作用域包是通過在 npm install 中通過名稱引用它來安裝的,前面是 @-symbol:
npm install @myorg/mypackage
作用域是將相關(guān)包組合在一起的一種方式,也會影響 npm 處理包的方式。 每個 npm 用戶/組織都有自己的范圍,只有您可以在您的范圍內(nèi)添加包。 這意味著您不必擔心有人在您之前拿走您的包裹名稱。 因此,這也是向組織發(fā)出官方軟件包信號的好方法。
SAP Spartacus 也使用了大量的 scoped module,如下圖所示: