第 362 篇 · 第 14 卷 前端,沒有極限 2026 年 7 月 7 日 · 台北
ls -lt ./posts --since=2013 REC · node 362 · uplink

nodejs

Yarn - Node.js 的套件管理工具

2016 年 10 月 18 日 · 4 分鐘閱讀 · By Wang Casper

NPM 每次在安裝的時候,都會安裝很久很久,就算是好幾個類似的專案,每次在執行 npm install 時都需要花費大量的時間,而且在網路不穩定的環境下還可能造成中斷。Yarn 可以讓這些問題好轉些,在實測時,安裝一次以上的套件時間將只需要原本的 20% 時間(甚至更短),將大幅減少逛 FB 的機會。

安裝 Yarn

Mac 用戶需要先安裝 Homebrew,安裝方法可以參考 http://brew.sh/,這邊我也順便更新了 homebrew ,目前版本如下。

接下來再安裝的時候跳出一個錯誤 (brew install yarn)

這貌似新版的 OS Sierra 的問題,有兩個方法,一種是更新 Xcode,另一種是刪除 Xcode

原本是想採用更新 Xcode 的方式,但是 Xcode 壞了打不開(-.-),另外就是下載的大小佔 4.4 G…,無奈的情況下,只好把 Xcode 丟進垃圾桶了。

好了,在下一次 brew install yarn,將會開使正長的安裝 Yarn (我以為 Xcode 是必備的勒…)。

下載完後檢查版本 yarn --version

0.15.1

使用 Yarn

這邊使用兩個專案來測試,測試 安裝時間 以及所需的 磁碟空間

專案一

在當下的資料夾中,我先把原始的 node_modules (28.1 mb)移除,以下是 package.json 的部分內容。

"devDependencies": {
  "autoprefixer": "^6.5.1",
  "gulp": "^3.9.1",
  "gulp-autoprefixer": "^3.1.1",
  "gulp-concat": "^2.6.0",
  "gulp-postcss": "^6.2.0",
  "gulp-sass": "^2.3.2",
  "gulp-uglify": "^2.0.0"
}

npm install 版本所佔的磁碟空間大小

輸入 yarn install 就會開始安裝,安裝時會先檢查本地端有沒有,如果沒有才會線上拉。

第一次安裝 37.03秒,第二次安裝 6.9秒。

yarn install 版本所佔的磁碟空間大小

專案二

好像是一個 express 範例…,在插入一些 gulp 教學。

"dependencies": {
    "express": "~4.10.6",
    "body-parser": "~1.10.1",
    "cookie-parser": "~1.3.3",
    "morgan": "~1.5.1",
    "serve-favicon": "~2.2.0",
    "debug": "~2.1.1",
    "jade": "~1.8.2"
  },
  "devDependencies": {
    "gulp-gh-pages": "^0.5.4",
    "gulp-webserver": "^0.9.1",
    "gulp": "^3.9.1",
    "gulp-concat": "^2.6.0",
    "gulp-sass": "^2.3.2",
    "gulp-uglify": "^2.0.0"
  }

使用 npm install 安裝時,所佔的磁碟空間為 38mb。

yarn 所佔的磁碟空間為 26.7mb,且第一次安裝時間約 27 秒,第二次 約 8 秒。

加速安裝的秘密,就在於根目錄下的 .yarn-cache 資料夾,這個資料夾會將每次安裝的套件先安裝一份到這來,往後如果需要相同套件,就會從這邊拉。

NPM 與 Yarn 指令比較

大多數的指令用法和原本並無差異,只要將 npm 換成 yarn 即可,特別要注意的是 npm install [package] 安裝少數套件在 yarn 是不支援的,yarn 的套件都是必須儲存 (--save)。

NPM Yarn 說明
npm install yarn install -
npm install [package] X 不支援直接安裝套件
npm install --save [package] yarn add [paakage] 僅是將 --save 改成 add
npm install --save-dev [package] yarn add [paakage] --dev
npm install --global [package] yarn global add [package] 這段還沒測過 global 的差異
npm uninstall [package] x
npm uninstall --save [package] yarn remove [package]
rm -rf node_modules && npm install yarn upgrade 移除再安裝 變 直接升級套件

更多的語法:https://yarnpkg.com/en/docs/migrating-from-npm

目前 Yarn 個人還沒完全測試過,但就一開始的體驗確實不錯,入門也不太需要太多改變 (除了砍掉了 Xcode 而已!?),算是一個值得入手的好工具。

開發團隊包含了 Facebook、Google 等,而且相容目前的 NPM 註冊表,有興趣的可以放心使用 http://www.ithome.com.tw/news/108974