繼續(xù)之前的例子「氐現(xiàn)在我們有一個應(yīng)用依賴2個模塊:
- Module-A,依賴模塊B v1.0
-
Module-C,依賴模塊B v2.0
例子:
現(xiàn)在我們想要依賴另一個包,module D.Module D依賴moduleB v2.0物独,就像Module C一樣:
因為B v1.0已經(jīng)是頂級依賴菱魔,我們依然不會將B v2.0作為頂級依賴拄丰。因此B v2.0作為嵌套依賴安裝在Module D下面现斋,技師我們已經(jīng)有了一個一樣的安裝嵌套在模塊C下喜最。
如果二級依賴被2+模塊需要,但是在目錄的層級不是安裝在頂級依賴步责,就會重復(fù)和嵌套在主要的目錄下返顺。
但是,如果二級目錄被多個模塊需要蔓肯,但是作為頂級依賴安裝的遂鹊。就不會重復(fù),并且通過頂級依賴共享需要蔗包。
比如秉扑,我們需要模塊E,像模塊A调限,依賴于模塊B v1.0
因為B v1.0已經(jīng)作為頂級依賴舟陆,所以就不會重復(fù)嵌套〕馨可以簡單的安裝模塊E并且和模塊A共享模塊B
在終端里展示如下:
那么現(xiàn)在秦躯,如果我們將模塊A更新到v2.0,依賴與模塊B v2.0,而不是B v.10會怎么樣呢裆装?
記住安裝的順序是很重要的踱承。
即使在我們的package.json
首先安裝的時候模塊A v1.0,使用npm install
命令意味著模塊A v2.0是后面安裝的。
當(dāng)我們運行npm install mod-a@2 --save
時哨免,npm3會做以下的事情:
- 刪除ModuleA v1.0
- 安裝ModuleA v2.0
- 會保留ModuleB v1.0 因為Module E仍然需要它
- 會將Module B v2.0作為ModuleA v2.0的嵌套依賴安裝茎活,因為ModuleB v1.0占了頂級目錄層級
在終端里看是這樣的:
最后,我們也將Module E更新到v2.0,同樣依賴于Module B v2.0而不是Module B v1.0,就像module A更新一樣:
npm3執(zhí)行以下事情:
- 刪除Module E v1.0
- 安裝Module E v2.0
- 刪除Module B v1.0琢唾,因為不再有依賴
- 將Module B作為頂級依賴安裝载荔,因為頂級沒有Module B
在終端里如下:
現(xiàn)在,很明顯不太好采桃。我們幾乎在每個目錄都有模塊B懒熙。為了去重,執(zhí)行:
npm dedupe
這個命令會將所有的依賴Module B v2.0的引用指向頂級的Module B v2.0芍碧,然后刪除掉嵌套的依賴煌珊。
終端如下: