npm 如何處理依賴與依賴衝突

這是我參與8月更文挑戰的第4天,活動詳情查看:8月更文挑戰node

npm處理依賴與依賴衝突

在npm(v2)以及以前的版本中,npm處理依賴的方式是經過遞歸,依次安裝模塊的依賴,以此造成一顆龐大的依賴樹。這個機制能夠解決依賴包的衝突問題,可是也會致使如下問題:npm

1.依賴的層級過深,刪除緩慢。markdown

2.不一樣的模塊會依賴相同的包,有冗餘,甚至可能形成bugpost

依賴共享與衝突

在項目中可能出現項目依賴A包和B包,同時B包依賴A包的狀況。spa

npm v2首先會判斷A包是否兼容,若是兼容就只會在項目路徑下安裝A包,若不兼容則會在B包中再安裝一個A包code

在 npm v3 版本以後,npm 採用了更合理的方式去解決以前的依賴地獄的問題。npm v3 嘗試把依賴以及依賴的依賴都儘可能的平鋪在項目根目錄下的 node_modules 文件夾下以共享使用;若是遇到由於須要的版本要求不一致致使衝突,沒辦法放在平鋪目錄下的,回退到 npm v2 的處理方式,在該模塊下的 node_modules 裏存放衝突的模塊。orm

例如,當前項目有依賴的模塊 A@1.0.0B@1.0.0A@1.0.0 依賴於模塊 C@1.0.0D@0.6.5B@1.0.0 又依賴於模塊 C@2.0.0E@1.0.3。注意,此時因爲模塊 C 的兩個版本 C@1.0.0 和 C@2.0.0 被分別依賴,鑑於模塊在同一個 node_modules 目錄中是按照模塊名目錄存放,所以這兩個版本沒辦法同時平鋪在同一目錄,所以,其中一個版本的 C 模塊將會以 npm v2 的處理方式放入子 node_modules 目錄中。對象

存在的問題

若是A包在window下注冊對象,會出現衝突遞歸

peerDependencies

當一個依賴模塊X定義在peerDependencies中而不是devDependencies或dependencies中時,依賴該模塊的項目就不會自動下載該依賴。ci

相關文章
相關標籤/搜索