? ? ? 前端:做了差不多一年的前端了壶唤,經常使用到npm這樣的包管理工具兴蒸,也聽說過yarn這東西。在我的見識蕾殴,只知道npm和yarn是個同樣的工具岛啸,具體有什么區(qū)別沒有深入了解過。荡灾。瞬铸。今天在網上看前端文章的時候,看到了關于這方面的內容荧缘。就結合自己的經驗信姓,做一次總結绸罗。
? ? ? npm3以前的版本,被稱為遠古時代珊蟀。那時候的安裝策略并不是扁平化的育灸。開發(fā)者安裝一個模塊,就會在node_modules找到對應的模塊名稱的文件夾定页,模塊的所有依賴又會在其文件夾下绽诚。這樣就會容易導致目錄的層級特別高,而且對于windows的操作系統(tǒng)卒落,最長的路徑長度限制在248個字符之內儡毕。
? ? ?總結一個一下缺點:
? 1.目錄嵌套層級過深扑媚;
? 2.模塊是相互獨立的,相同的模塊實例無法共享费坊。
? ? 后來人們?yōu)榱私鉀Q嵌套過深的問題旬痹,引入了軟鏈接的方案两残。(把所有的包扁平化的安裝在一個位置,然后通過軟鏈接-windows 快捷方式的方式組合到 node_modules 中人弓。)npminstall和pnpm就實現(xiàn)了這種方案票从。cnpm使用的就是npminstall
好處可以減少嵌套層級太深,而且可以達到模塊共享峰鄙,減少內存占有。但也有很明顯的缺點:
1.一般情況都是通過第三方庫來實現(xiàn)這功能魁蒜,無法保證跟npm一樣的行為兜看;
2.無法和npm一起使用,要么使用npm或者是cnpm/pnpm细移,兩者混用可能會造成奇怪的效果弧轧。
? ? ?npm3的時代碗殷,它不是通過軟鏈接的形式來實現(xiàn)扁平化,而是直接把所有的模塊安裝在node_modules下代乃。在對于不同版本的模塊依賴時搁吓,(如:package-a依賴 package-c@0.x.x 擎浴,而package-b依賴 package-c@1.x.x )則會按照原來的嵌套方式解決。
這種方式很好的解決了之前的缺點贮预,但唯一不足的就是安裝速度還是相對慢仿吞。
yarm的時代:隨著node應用到企業(yè)級項目唤冈,npm暴露出很多問題。
1.npm 無法保證兩次安裝的版本是完全相同的你虹,因為它是通過語義化的版本來安裝董饰,可以限制你安裝模塊的版本號,但是你無法限制你安裝模塊依賴的模塊的版本號啄栓;
2.安裝速度真的是很慢昙楚,一旦一個項目依賴上千個包,那就要等半個鐘桂肌。
yarm誕生就是為了解決這些問題:
1)引入 yarn.lock 文件來管理依賴版本問題崎场,保證每次安裝都是一致的遂蛀;
2)緩存加并行下載保證了安裝速度
npm5的時代谭跨,在yarn的帶動下,npm官方開始進行了改進李滴。
1)引用了package-lock.json螃宙,默認添加。作用和yarn.lock一樣所坯;
2)安裝自動添加 dependencies谆扎,不需手動書寫-S參數;
3)提升了安裝速度芹助。