npm2 與 npm3的包版本管理
阿新 • • 發佈:2018-02-12
mar 輸出 webpack color fin ins end 設定 很多
npm2采用嚴格的包依賴模式
npm install name@1.2.* ---- 1.2.0 <= version <= 1.2.9
npm install name@1.* ---- 1.0.0 <= version <= 1.9.9
npm install name@* ---- 0.0.0 <= version
npm install name@^1.2.3 ---- 1.2.3 <= version < 1.9.9
npm install name@~1.2.3 ----- 1.2.3 <= version <1.2.9
我們還可以通過npm info name,查看包的依賴包版本:
例如通過npm info vue,我們可以在輸出的信息裏面的
devDependencies 找到依賴於webpack的版本:webpack: ‘^3.10.0‘
npm3采用的包版本管理模式:
假如我們有一個包A 依賴於包B1.0.0,後來我們有了包C,包C需要依賴包B2.0.0,這個時候npm如何處理呢,npm會把包B2.0.0安裝在包C下面,這個時候包B2.0.0嵌套在包C下面,所以我們本質上擁有兩個版本的包B,如果我們又有了包D,包D也依賴於包B2.0.0,那麽npm依然會在包D下面創建一個包B2.0.0,這個時候就擁有三個包B,假如包D不依賴包B2.0.0,而是依賴於包B1.0.0,那因為包B1.0.0是最先下載的,他屬於頂級依賴,所以這個時候什麽都不用做,因為包B1.0.0就在那裏,這類似於全局環境和局部環境,我們把最先下載的包B1.0.0放入全局環境,如果以後有其他包(例如包C)依賴與包B2.0.0,則放入對應其他包(例如包C)的局部環境,因為局部環境對其他對象是不可見的,所以以後如果還會有其他包(例如包D)依賴於包B2.0.0,我們會另外創建一個包B2.0.0放入對應包D的局部環境,如果包D改為依賴包B1.0.0,因為包B1.0.0在全局環境,可以直接引用,所以就不需要做任何事情
那現在我們設定包D依賴於包B2.0.0,所以現在依賴於包B1.0.0的只有包A,如果我們升級了包A,升級後的包A依賴於包B2.0.0,那麽最終會在全局環境刪除包B1.0.0,因為包B1.0.0不再有價值了,然後在全局環境換成包B2.0.0,因為新升級的包A需要包B2.0.0,註意這個時候局部環境的包B2.0.0仍然存在,所以很多時候我們需要去重,去掉重復的包引用,例如本例:全局環境和局部環境引用了同樣的包B版本,我們通過執行:
npm dedupe
達到刪除局部環境裏面包B2.0.0的目的,
npm2 與 npm3的包版本管理