npm2 與 npm3的包版本管理

npm2採用嚴格的包依賴模式vue

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
devDependencies 找到依賴於webpack的版本:webpack: '^3.10.0'npm install name@~1.2.3 ----- 1.2.3 <= version <1.2.9

咱們還能夠經過npm info name,查看包的依賴包版本:
  例如經過npm info vue,咱們能夠在輸出的信息裏面的

npm3採用的包版本管理模式:webpack

  假如咱們有一個包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在全局環境,能夠直接引用,因此就不須要作任何事情web

  那如今咱們設定包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

達到刪除局部環境裏面包B2.0.0的目的,npm dedupe
相關文章
相關標籤/搜索