天天看點

Yarn 更快更可靠的 CI 建立工具

<b>本文講的是Yarn 更快更可靠的 CI 建立工具,</b>

<b></b>

你可能聽說過 Yarn ,它劍指蒼穹,要做成一個更快、更可靠的 npm 用戶端。能夠更快的在本地安裝擴充包的确很棒,但是為了真正能夠使用 Yarn 到淋漓盡緻,你最好在持續繼內建務器上使用它。

當配合一台持續內建伺服器使用時,Yarn 能夠減少因為各式各樣的安裝包的解析方式不同導緻的随機 CI 錯誤。

由于安裝緩慢和 CI 産生的随機錯誤會降低整個團隊的開發效率,它們将會成倍地給你的團隊拖後腿。随機錯誤的出現甚至比安裝緩慢更令人沮喪,因為一旦出錯,你必須要确定是程式出現了 BUG 還是擴充包的問題。知之非難,行之不易。

Yarn 來拯救你了!

Yarn 更快更可靠的 CI 建立工具

一種新的 npm 資料總管

Yarn 并不是 npm 的包資料總管的替代,它也并非是一款有競争力的擴充包生态管理庫,是以它不會重蹈 Bower 慘敗的覆轍。

Yarn 是一款與 npm 包管理協同工作的軟體。

安裝更快。

确定的依賴管理 — 通過 <code>yarn.lock</code>,你能夠每次都擷取到相同安裝位置相同版本的封包件。

Yarn 剛剛釋出的時候,我馬上意識到它可能會非常有價值,但是我仍然按兵不動,想看看它是否真的實作了當時吹下的牛逼。

後來越來越多的人說 Yarn 很好用,我才決定要在一款應用中使用它。

Yarn 團隊建議像安裝原生應用那樣安裝 Yarn,而我建議你完全可以不看他們的安裝文檔。

Homebrew 安裝的同時也會安裝 Node,它會将全局的 <code>node</code> 和 <code>npm</code> 指令添加到 Homebrew 路徑中,并且會破壞你原本的 Node 的安裝。

另外,由于 Homebrew 路徑的依賴管理問題,如果你更新 macOS 到最新版,它将會打亂 <code>usr/local</code> 的權限進而破壞 Homebrew ,是以你還需要整理這團亂麻。

幸虧還有更好的選擇:

好處:當你搭建 CI 伺服器的時候,你同樣需要 <code>npm</code> ,是以你可以使用相同的方法安裝 <code>yarn</code> 在任何你需要的地方。

很諷刺吧,是的:我确實建議你安裝一個 JavaScript 包管理工具來安裝新的 JavaScript 包管理工具。我确信,這也是 Yarn 團隊建議在 Mac 上使用 Homebrew 安裝的真正原因,是為了避免這種稍稍有點尴尬的諷刺的事情。但是相信我:

<code>npm</code> 對于有經驗的 JavaScript 開發者來說,這是最簡單最好的安裝 Yarn 的方式。

Yarn 團隊會告訴你 OS 原生包依賴管理工具才是最好的方式,因為它會記錄你所有的包依賴關系。我了解這種關系,但事實上這隻在 Linux 系統下才支援。況且 Homebrew 并不是 macOS 原生的包依賴管理工具,它并不會也不應該管理你所有的應用依賴。

Yarn 最主要的依賴是 Node,并且 Homebrew 并不是安裝 Node 的最好的方式。既然如此,我們為什麼還要用 Homebrew 去管理 Yarn 的依賴關系呢?

Windows 下那又是别有洞天了,由于我并不了解,是以我暫不評論 Windows 下的安裝如何。

你知道什麼包管理軟體能夠在Mac、Windows和Linux下用法相同卻沒有跨平台的煩惱呢? npm。

有一些你需要識記的指令,簡而言之:

添加依賴

<code>yarn add</code>

添加開發依賴

<code>yarn add --dev</code>

移除依賴

<code>yarn remove</code>

安裝

<code>yarn</code> (安裝是預設行為)

Yarn 更快更可靠的 CI 建立工具

以上是你大部分時候會用到的。

Yarn 非常神奇地用 <code>yarn.lock</code> 檔案解決了确定的依賴關系,它應該是一種更加可靠的 <code>npm shrinkwrap</code> 的形式。關鍵的差別就是 npm 的安裝算法并不是确定的,甚至是壓縮算法,而 Yarn 的算法是确定的。這意味着使用同一個鎖定檔案,你在這台機器上的安裝将會和在另一台機器上的安裝完全相同。

不要在 git 中忽略 yran.lock ,它的存在就是為了保證确定的依賴關系,進而避免 “works on my machine” 的錯誤。

為了讓鎖定檔案能夠大顯神通,你必須在 git 中 check 它。

正如我在安裝階段所提到的那這樣,你可以用 <code>npm install -g yarn</code> 方式安裝 yarn ,這種方式能夠在大多數 CI 伺服器上運作。以下是 Travis-CI users 的一個 <code>.travis.yml</code>例子:

如果你非常好奇 yarn 安裝到底有多快,以下是我在應用中測試安裝 from-scratch 的資料:

使用 npm:

使用 Yarn:

哦!

Yarn 的主要的賣點就在于它要比 npm 更快,但是在我的項目實測中,它實際上在從 scratch 安裝依賴的時候更慢了。

那麼添加新的依賴呢?

OK,這才像點樣子。我一直還在擔心 from-scratch 的安裝時間,但是現在,利用 yarn 添加擴充包大概比 npm 快了兩倍。

顯然,from-scrath 的安裝仍然有很大的提升空間(這決定了你的 CI 的安裝速度),但是我已經很滿意了。

且對它持半信半疑的态度,因為這些結果可能會因系統、版本等因素而有不同。

迄今為止,我對 Yarn 的體驗大部分情況下都很好。

我僅僅是剛開始在産品中測試,是以我不能很自信地對其穩定性論及一二,但是我抱以樂觀的心态。

如果 Yarn 能夠證明如萬衆期待的那樣,它将會節省你的團隊非常多的時間。但是到目前為止,我得到的結果也良莠不齊。

讓我現在很絕對地說是有點太早了,但是我将會樂觀地給予它鼓勵性的肯定。我非常支援 Yarn 團隊能夠在後續的時間裡解決問題并不斷做出改進。

<b>原文釋出時間為:2016年11月17日</b>

<b>本文來自雲栖社群合作夥伴掘金,了解相關資訊可以關注掘金網站。</b>

繼續閱讀