幽靈依賴的出現和npm的發展存在一定關係。
早起的npm1,2都是鏈式下載相關依賴,雖然鏈式解決了子依賴版本衝突問題,但是仍然無法重複使用相同版本依賴,並且會導致檔案路徑過長無法解析等問題(路徑地址長度一般處理260多位)
如下圖所示:
為了解決無法重複使用相同版本依賴問題,npm3推出了扁平化解決方案,透過將相關子依賴提升來解決問題。npm3雖然解決了重複版本依賴問題,但是隨之帶來的是幽靈依賴問題,什麼是幽靈依賴這裡假如前端開發專案中引用了A庫,A庫引用了B庫,B庫引用了C庫,由於npm3的特性會將B和C進行扁平化處理,導致我們在專案制可以不安裝B和C的情況下直接使用B和C庫,如果當A庫更新以後不使用B庫,那麼我們開發的專案就會出現B,C庫報錯問題。
如下圖所示:
如何解決幽靈依賴:目前並沒有特別好的方法去解決幽靈依賴,只能儘量避免,不過我們可以使用pnpm實現幽靈依賴的一些規避。