看這樣一條指令:
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,如下圖所示:
