引言
雖然網(wǎng)上和知乎上有好多文章寫 npm 和 yarn 的區(qū)別魁瞪。并且我寫的文章中借鑒他人的,但還是希望發(fā)出來壳炎,自己想看的時候,就立馬可以找到。引用的文章也會在底部寫出來了茸时。
yarn 介紹
yarn 是由 Facebook妹蔽、Google沥匈、Exponent 和 Tilde 聯(lián)合推出了一個新的 JS 包管理工具第焰,yarn 是為了彌補 npm 的一些缺陷而出現(xiàn)的买优。
npm 的缺陷:
npm install 下載速度慢,重新 install 時速度依舊慢
同一個項目挺举,安裝的無法保持一致性。原因是因為 package.json 文件中版本號的特點導致的烘跺,下面三個版本號在安裝的時候代表不同的含義湘纵。
"5.0.3" # 表示安裝指定的5.0.3版本
"~5.0.3" # 表示安裝5.0.X中最新的版本
"^5.0.3" # 表示安裝5.X.X中最新的版本
- 使用 npm 安裝多個 js 包時,包會在同一時間下載和安裝滤淳。安裝過程中梧喷,其中一個包拋出了一個異常,但 npm 會繼續(xù)安裝其他包,所以錯誤信息就會在一大堆提示信息中丟失掉铺敌,以至于直到執(zhí)行前汇歹,都不會發(fā)現(xiàn)實際發(fā)生的錯誤。
yarn 優(yōu)點
1. 速度快:(主要來自一下兩個方面)
-
并行安裝
無論 npm 還是 yarn 在安裝包的時候偿凭,都會執(zhí)行一系列任務产弹。 npm 是按照隊列執(zhí)行每個 package,所以 npm 是串行的弯囊。
而 yarn 是并行的痰哨,它同步執(zhí)行所有任務,性能得到了極大的提升匾嘱。
-
離線模式
如果使用 yarn 已經(jīng)安裝過一個軟件包斤斧,再次安裝時 yarn 會在之前的緩存中獲取,而不會像 npm 再次從網(wǎng)絡中下載霎烙。
2. 安裝版本統(tǒng)一
- 為了保持安裝版本的統(tǒng)一性撬讽,yarn 有一個鎖定文件(lock file)。它記錄了被確切安裝上的模塊的版本號悬垃。每次只要新增一個模塊游昼,Yarn 就會更新 yarn.lock 這個文件。這么做保證了每一次拉取同一個項目依賴時盗忱,使用的都是一樣的模塊版本酱床。
- npm 也有辦法實現(xiàn)使用相同版本的 packages,但需要開發(fā)者執(zhí)行 npm shrinkwrap 命令趟佃。這個命令將會生成一個鎖定文件扇谣,在執(zhí)行 npm install 的時候,該鎖定文件會先被讀取闲昭,和 Yarn 讀取 yarn.lock 文件一個道理罐寨。
- npm 和 Yarn 兩者的不同之處在于:Yarn 默認會生成這樣的鎖定文件,而 npm 要通過 shrinkwrap 命令生成 npm-shrinkwrap.json 文件序矩,只有當這個文件存在的時候鸯绿,packages 版本信息才會被記錄和更新。
3. 輸出簡潔
- npm 的輸出信息比較冗長簸淀。在執(zhí)行 npm install <package> 的時候瓶蝴,命令行里會不斷地打印出所有被安裝上的依賴。
- Yarn 簡潔太多:默認情況下租幕,結(jié)合了 emoji 直觀且直接地打印出必要的信息舷手,也提供了一些命令供開發(fā)者查詢額外的安裝信息。
4. 多注冊來源處理
- 所有的依賴包劲绪,不管他被不同的庫間接關(guān)聯(lián)引用多少次男窟,安裝這個包時盆赤,只會從一個注冊來源去裝,要么是 npm 要么是 bower, 防止出現(xiàn)混亂不一致歉眷。
5. 語義化進行了修改
- yarn 改變了一些 npm 命令的名稱牺六,比如 yarn add/remove 安裝卸載模塊,而 npm 是 install/uninstall 安裝卸載模塊汗捡。
常用命令:
- yarn / yarn install 等同于npm install 批量安裝依賴
- yarn add xxx 等同于 npm install xxx —save 安裝指定包到指定位置
- yarn remove xxx 等同于 npm uninstall xxx —save 卸載指定包
- yarn add xxx —dev 等同于 npm install xxx —save-dev
- yarn upgrade 等同于 npm update 升級全部包
- yarn global add xxx 等同于 npm install xxx -g 全局安裝指定包
yarn 和 npm 命令對比
1.查看版本
yarn --version
npm -version(或者 node -v)
2.安裝淘寶鏡像
yarn config set registry 'https://registry.npm.taobao.org'
npm install -g cnpm --registry=http://registry.npm.taobao.org
3.初始化某個項目
yarn init
npm init
4.默認安裝項目依賴
yarn install
cnpm install
5.安裝依賴淑际,并且默認保存到 package
yarn add xxx
cnpm install xxx --save
6.卸載依賴
yarn remove xxx
cnpm uninstall xxx --save
7.更新依賴
yarn upgrade xxx
cnpm update xxx --save
8.安裝全局項目依賴
yarn global add xxx
cnpm install xxx -g
9.安裝特定版本號的項目依賴
yarn add xxx@
cnpm install xxx@1.2.33 --save
10.發(fā)布/登錄/登出,一系列NPM Registry操作
yarn publish/login/logout
npm publish/login/logout
11.運行命令
yarn run/test
npm run/test