關於包管理工具,npm,yarn ,cnpm

      前端:做了差不多一年的前端了,經常使用到npm這樣的包管理工具,也聽說過yarn這東西。在我的見識,只知道npm和yarn是個同樣的工具,具體有什麼區別沒有深入瞭解過。。。今天在網上看前端文章的時候,看到了關於這方面的內容。就結合自己的經驗,做一次總結。

      npm3以前的版本,被稱爲遠古時代。那時候的安裝策略並不是扁平化的。開發者安裝一個模塊,就會在node_modules找到對應的模塊名稱的文件夾,模塊的所有依賴又會在其文件夾下。這樣就會容易導致目錄的層級特別高,而且對於windows的操作系統,最長的路徑長度限制在248個字符之內。

     總結一個一下缺點:

  1.目錄嵌套層級過深;

  2.模塊是相互獨立的,相同的模塊實例無法共享。



    後來人們爲了解決嵌套過深的問題,引入了軟鏈接的方案。(把所有的包扁平化的安裝在一個位置,然後通過軟鏈接-windows 快捷方式的方式組合到 node_modules 中。)npminstall和pnpm就實現了這種方案。cnpm使用的就是npminstall

好處可以減少嵌套層級太深,而且可以達到模塊共享,減少內存佔有。但也有很明顯的缺點:

1.一般情況都是通過第三方庫來實現這功能,無法保證跟npm一樣的行爲;

2.無法和npm一起使用,要麼使用npm或者是cnpm/pnpm,兩者混用可能會造成奇怪的效果。



     npm3的時代,它不是通過軟鏈接的形式來實現扁平化,而是直接把所有的模塊安裝在node_modules下。在對於不同版本的模塊依賴時,(如:package-a依賴 [email protected] ,而package-b依賴 [email protected] )則會按照原來的嵌套方式解決。

這種方式很好的解決了之前的缺點,但唯一不足的就是安裝速度還是相對慢。




yarm的時代:隨着node應用到企業級項目,npm暴露出很多問題。

1.npm 無法保證兩次安裝的版本是完全相同的,因爲它是通過語義化的版本來安裝,可以限制你安裝模塊的版本號,但是你無法限制你安裝模塊依賴的模塊的版本號;

2.安裝速度真的是很慢,一旦一個項目依賴上千個包,那就要等半個鍾。

yarm誕生就是爲了解決這些問題:

1)引入 yarn.lock 文件來管理依賴版本問題,保證每次安裝都是一致的;

2)緩存加並行下載保證了安裝速度



npm5的時代,在yarn的帶動下,npm官方開始進行了改進。

1)引用了package-lock.json,默認添加。作用和yarn.lock一樣;

2)安裝自動添加 dependencies,不需手動書寫-S參數;

3)提升了安裝速度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章