新世代的包管理 yarn

NPM

大家都知道現在 Node 上最盛行的 Packages Manage 工具是 NPM,當裝好 Node 後,npm 就預裝好了,當你做任何有關 package 指令的時候都離不開它。

NPM 的不足

在 npm v2 時代,安裝時會以一個 package 為單位,每個 package 即是一個 folder,這樣的問題就在於如果 A package 與 B package 同時依賴 C,這樣 C 就會同時被安裝兩份在 AB folder 下,而造成 node_modules 的肥大與過度重覆模組。

npm v3 試圖要解決這個問題,把所有安裝的包都扁平化在 node_modules 下了,如果依賴同樣版本的 package,就不會造成重覆安裝。解決了重覆性的問題之後,一切都很美好嗎?npm v3 最令人垢病的是安裝速度,因為安裝實在太久了,每次 npm install 一下,開發人員就只能去上廁所,這點真的是硬傷,嚴重影響開發效率,DevOps 在部署上也是罵聲連連。

明日之(救)星 yarn

先看一段 yarn 官網 上的標語:

FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT.

再來看看貢獻者大神們: https://github.com/yarnpkg
image

這陣容不紅有天理嗎?數據會說話,yarn 一推出立即衝上 GitHub Trend 榜第一,狠甩第二名好幾條街阿。 image

yarn 實測

當然光說不練是不行的,底下拿了我們的專案 OWL-UI 來實測, 可以看到 package.json 我們 Dependencies 不少,用 npm 安裝至少要 5 分鐘 以上。

初始安裝,無 yarn.lock(cache) 的情況下:

$ rm -rf ./node_modules/ && rm -f ./yarn.lock && yarn install
yarn install v0.15.1  
info No lockfile found.  
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 📃  Building fresh packages...
success Saved lockfile.  
✨  Done in 39.58s.

在有 yarn.lock(cache) 的情況下,可再加快一倍:

$ rm -rf ./node_modules/ && yarn install
yarn install v0.15.1  
[1/4] 🔍  Resolving packages...
[2/4] 🚚  Fetching packages...
[3/4] 🔗  Linking dependencies...
[4/4] 📃  Building fresh packages...
success Saved lockfile.  
✨  Done in 18.38s.

整整快了十倍以上,開始用 yarn 吧,解放開發效率,拯救部署,大家提早下班✨