yarn、npm、cnpm三者区别
放一張實驗室的合照壓壓驚,有點想實驗室的兄弟們了~~~
一、原理分析
npm
(1)npm 是Node.js 能夠如此成功的主要原因之一。npm 團隊做了很多的工作,以確保 npm 保持向后兼容,并在不同的環(huán)境中保持一致。
(2)npm是圍繞著 語義版本控制(semver)的思想而設計。
-
給定一個版本號:主版本號.次版本號.補丁版本號, 以下這三種情況需要增加相應的版本號:
-
主版本號: 當API發(fā)生改變,并與之前的版本不兼容的時候
-
次版本號: 當增加了功能,但是向后兼容的時候
-
補丁版本號:當做了向后兼容的缺陷修復的時候
npm 2
安裝每一個包所依賴的所有依賴項。如果我們有這么一個項目,它依賴項目A,項目A依賴項目B,項目B依賴項目C,那么依賴樹將如下所示:
缺點:
這個結(jié)構(gòu)可能會很長。這對于基于Unix的操作系統(tǒng)來說只不過是一個小煩惱,但對于Windows來說卻是個破壞性的東西,因為有很多程序無法處理超過260個字符的文件路徑名
npm 3
采用了扁平依賴關系樹來解決這個問題,所以我們的3個項目結(jié)構(gòu)現(xiàn)在看起來如下所示:
優(yōu)點:
存了已經(jīng)下載的每個版本的壓縮包。本地緩存的內(nèi)容可以通過npm cache ls命令進行查看。本地緩存的設計有助于減少安裝時間。
缺點:
(1)npm必須首先遍歷所有的項目依賴關系,然后再決定如何生成扁平的node_modules目錄結(jié)構(gòu)。npm必須為所有使用到的模塊構(gòu)建一個完整的依賴關系樹,這是一個耗時的操作,是npm安裝速度慢的一個很重要的原因
(2)想當然的以為每次運行npm install命令時,NPM都得從互聯(lián)網(wǎng)上下載所有內(nèi)容
(npm是有本地緩存的,它保存了已經(jīng)下載的每個版本的壓縮包。本地緩存的內(nèi)容可以通過npm cache ls命令進行查看。本地緩存的設計有助于減少安裝時間。)
cnpm
(1) cnpm跟npm用法完全一致,只是在執(zhí)行命令時將npm改為cnpm。
(2) npm安裝插件是從國外服務器下載,受網(wǎng)絡影響大,可能出現(xiàn)異常,如果npm的服務器在中國就好了,于是淘寶團隊干了這事。來自官網(wǎng):“這是一個完整 npmjs.org鏡像,你可以用此代替官方版本(只讀),同步頻率目前為 10分鐘 一次以保證盡量與官方服務同步。
配置:
npm install -g cnpm --registry=https://registry.npm.taobao.orgYarn
(1) Yarn一開始的主要目標是解決上一節(jié)中描述的由于語義版本控制而導致的npm安裝的不確定性問題。雖然可以使用npm shrinkwrap來實現(xiàn)可預測的依賴關系樹,但它并不是默認選項,而是取決于所有的開發(fā)人員知道并且啟用這個選項.
(2) yarn.lock文件,而且它是默認創(chuàng)建的。除了常規(guī)信息之外,yarn.lock文件還包含要安裝的內(nèi)容的校驗和,以確保使用的庫的版本相同。
(3)像npm一樣,yarn使用本地緩存。與npm不同的是,yarn無需互聯(lián)網(wǎng)連接就能安裝本地緩存的依賴項,它提供了離線模式。
(4)運行速度得到了顯著的提升,整個安裝時間也變得更少.
二、yarn 和 npm 對比
三、yarn 的優(yōu)點
速度快 。
速度快主要來自以下兩個方面:
(1)并行安裝:無論 npm 還是Yarn在執(zhí)行包的安裝時,都會執(zhí)行一系列任務。npm是按照隊列執(zhí)行每個package,也就是說必須要等到當前package安裝完成之后,才能繼續(xù)后面的安裝。而 Yarn 是并行執(zhí)行所有任務,提高了性能。
(2)離線模式:如果之前已經(jīng)安裝過一個軟件包,用Yarn再次安裝時之間從緩存中獲取,就不用像npm那樣再從網(wǎng)絡下載了。
總結(jié)
以上是生活随笔為你收集整理的yarn、npm、cnpm三者区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i茅台耐力值(贵州茅台集团)
- 下一篇: 缩短编译和打包时间