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