Yarn 套件管理器完整指南:初學者入門

更新日期: 2025 年 3 月 20 日

在開發 JavaScript 應用程式時,管理第三方函式庫(libraries)或模組(modules)是一個不可避免的工作。

對於這個需求,開發者通常會使用套件管理器(Package Manager)來安裝、更新和移除所需的套件。

最常見的 JavaScript 套件管理器是 npm(Node Package Manager),但在專案規模變大時,npm 可能會遇到安裝速度慢、相依性管理(dependencies management)混亂等問題。

為了解決這些痛點,Facebook 於 2016 年推出了 Yarn,提供更快、更安全、更穩定的套件管理體驗。

本篇文章將帶你了解 Yarn 的基本概念、安裝方式,以及如何在專案中使用它來管理套件,讓你能夠更有效率地開發 JavaScript 應用程式!


Yarn 是什麼?

在 JavaScript 開發的世界裡,專案往往需要依賴大量的外部函式庫(libraries)和模組(modules)。

這時候就需要一個套件管理器(Package Manager)來幫助我們安裝、更新、移除和管理這些相依性(dependencies)。

傳統上,開發者大多使用 npm(Node Package Manager) 來處理這些需求。

然而,隨著專案規模變大,npm 逐漸暴露出了一些缺點,例如:

  • 安裝速度較慢:npm 會逐一下載相依套件,導致安裝時間變長。
  • 相依性管理不夠穩定:不同環境可能會安裝不同版本的相依性,造成「在我這裡可以運作,但在你那裡卻不行」的問題。
  • 安全性風險:npm 下載的套件可能會被惡意篡改,帶來安全漏洞。

為了解決這些問題,Facebook 在 2016 年推出了 Yarn,它是一款高效、穩定且安全的 JavaScript 套件管理器。

Yarn 的全名是 “Yet Another Resource Negotiator”(另一個資源協調器),這個名稱源於 Apache Hadoop 生態系統中的一個技術,也反映了 Yarn 的核心目標——有效管理專案的相依性

Yarn 相較於 npm,主要強化了以下幾個方面:

更快的安裝速度

Yarn 採用並行下載(parallel downloads),可以同時下載多個套件,而 npm 則是逐一下載,因此 Yarn 安裝速度通常比 npm 更快

此外,Yarn 內建快取機制(caching),下載過的套件會被存儲起來,下一次安裝時可以直接使用,不需要重新下載,大幅提升效能。

gantt
    title Yarn vs npm 並行下載示意圖比較
    dateFormat  X
    axisFormat %s
    
    section Yarn 下載 (並行)
    套件 A        :a1, 0, 3
    套件 B        :a2, 0, 4
    套件 C        :a3, 0, 5
    
    section npm 下載 (順序)
    套件 A        :b1, 0, 3
    套件 B        :b2, 3, 7
    套件 C        :b3, 7, 12
    
    section 時間對比
    Yarn 總時間 (並行)    :crit, m1, 0, 5
    npm 總時間 (順序)     :crit, m2, 0, 12

更好的相依性管理

Yarn 使用 yarn.lock 檔案 來記錄專案的相依性版本,確保不同環境下安裝的套件版本一致,避免開發者之間的環境差異導致錯誤。

  • npm 早期(v5 之前)沒有類似 lock 檔案,導致相依性可能不一致
  • Yarn 的 yarn.lock 設計,確保每次安裝的套件版本與前一次完全相同,減少「在 A 端能跑,但 B 端無法運作」的情況。
  • npm 在 v5+ 之後才加入 package-lock.json,但 Yarn 的 yarn.lock 更早推出且更穩定。

更高的安全性

Yarn 內建校驗機制(checksum verification),在下載套件時會驗證完整性,確保下載的檔案沒有遭到惡意篡改。

這比 npm 更安全,因為 npm 早期的版本並未內建這種機制,開發者需要額外使用 npm audit 工具來檢查安全性。

支援離線安裝

Yarn 會自動快取下載過的套件,因此即使沒有網路,開發者也能安裝之前用過的套件,這對於網路不穩定的環境(例如:飛機上、公司內部受限的網路)特別有幫助。

📌 離線模式安裝示意

# 只要之前下載過某個套件,即使沒有網路,仍然可以安裝
yarn install --offline

Yarn 與 npm 的比較

雖然 npm 近年來也做了不少優化(例如 npm v7+ 改進了相依性管理與安裝速度),但 Yarn 仍然具備一些獨特的優勢。

以下是 Yarn 與 npm 在不同方面的比較:

功能Yarnnpm(舊版 v5-)npm(新版 v7+)
安裝速度✅ 快(並行下載 + 快取)❌ 較慢(逐一下載)✅ 改進後較快(並行下載)
相依性管理✅ yarn.lock 確保一致性❌ package-lock.json(v5+)✅ package-lock.json
安全性✅ 內建校驗機制,防止惡意套件❌ 需額外使用 npm audit✅ 內建 npm audit 工具
離線安裝✅ 支援❌ 需手動設定🔸 部分支援
CLI 指令yarn add/remove/installnpm install/uninstallnpm install/uninstall

npm 新版的改進

值得一提的是,npm 在 v7+ 版本開始逐步優化,改善了安裝速度、支援 peerDependencies、並行下載等功能,使其在效能上更接近 Yarn。

不過,Yarn 仍然在離線模式與相依性管理方面表現更優秀,因此許多大型專案仍然選擇 Yarn 作為首選的套件管理器。

Yarn 與 npm 的選擇建議

📌 何時選擇 Yarn?

  • 需要更快的安裝速度(特別是多人協作時)。
  • 希望確保每次安裝的套件版本完全一致。
  • 需要高安全性,避免下載到被篡改的套件。
  • 需要離線安裝功能,提升開發效率。

📌 何時選擇 npm?

  • 使用 Node.js 內建的功能,不想額外安裝 Yarn。
  • 專案已經基於 npm 且運行穩定,不想切換工具。
  • 需要與 npm 官方生態系統(如 npm audit)更緊密結合

如何安裝 Yarn?

Yarn 可以透過多種方式安裝,以下是幾種常見的方法:

透過 npm 安裝 Yarn

如果你的系統已安裝 Node.js,你可以直接使用 npm 來安裝 Yarn:

npm install --global yarn

安裝完成後,可以透過以下指令確認 Yarn 是否安裝成功:

yarn --version

若顯示版本號(如 1.22.193.0.2),表示安裝成功。

使用官方安裝方式

如果你不想透過 npm 安裝,Yarn 提供了官方安裝方式,支援 macOS、Windows 和 Linux。

你可以依照官方文件的說明,使用 Homebrew(macOS)、Chocolatey(Windows)或 Shell Script(Linux)來安裝。

官方文件網址:https://yarnpkg.com/getting-started/install

使用 Corepack 安裝(Node.js 16.10+ 版本)

如果你的 Node.js 版本為 16.10.0 或以上,建議使用 Corepack 來管理 Yarn:

corepack enable

啟用後,即可使用 yarn 指令安裝與管理專案套件。


Yarn 基本指令

初始化專案

在專案目錄中執行以下指令,建立 package.json 設定檔:

yarn init -y

📌 適用版本: Yarn v1, v2, v3

執行後,專案目錄中會生成 package.json 檔案,記錄專案的基本資訊與相依性。

Yarn v2 及 v3 的不同點

  • Yarn v1,預設會互動式詢問專案資訊,-y 可略過詢問並使用預設值。
  • Yarn v2+(Berry)yarn init 主要建立 package.json,但若要轉換為 Yarn v2,需要執行: yarn set version berry

安裝套件

使用 yarn add 指令安裝 npm 套件,例如安裝 lodash

yarn add lodash

📌 適用版本: Yarn v1, v2, v3

安裝特定版本的套件(例如 [email protected]):

安裝開發相依性(devDependencies)(只在開發環境使用):

yarn add eslint --dev

Yarn v2+ 的不同點

  • Yarn v1 預設使用 node_modules/ 來儲存安裝的套件。
  • Yarn v2+(Berry) 採用 Plug’n’Play(PnP),不再使用 node_modules/,相依性會記錄在 .pnp.cjs 檔案中,提升效能。

如果專案需要 node_modules/ 目錄,可以使用 “node_modules linker” 模式:

yarn config set nodeLinker node-modules
yarn install

移除套件

要移除某個已安裝的套件,使用 yarn remove 指令,例如移除 lodash

yarn remove lodash

📌 適用版本: Yarn v1, v2, v3

安裝所有相依性(專案初始化)

當你從 GitHub 或其他開發者獲取專案程式碼時,通常會有 package.jsonyarn.lock 檔案。執行以下指令來安裝所有必要的套件:

yarn install

📌 適用版本: Yarn v1, v2, v3

📌 Yarn v2+ 可簡寫為 yarn,效果等同於 yarn install

不同版本的 yarn install 行為:

  • Yarn v1:建立 node_modules/,下載相依性。
  • Yarn v2+(Berry):使用 PnP,不建立 node_modules/,而是透過 .pnp.cjs 來管理相依性。
  • 若專案強制使用 node_modules/,請執行yarn config set nodeLinker node-modules yarn install

Yarn 進階功能

使用 Yarn 離線模式

Yarn 會自動快取下載過的套件,因此即使沒有網路,你仍然可以安裝之前用過的套件:

yarn install --offline

📌 適用版本: Yarn v1, v2, v3

如果快取中有該套件,將直接使用,不從網路下載。
適合在沒有網路或受限環境下工作,例如:內部專案、飛機上開發(過勞命)等。

注意

  • 如果快取中沒有某個套件,yarn install --offline安裝失敗
  • 可以使用 yarn cache list 來檢查已快取的套件。

清除 Yarn 快取

如果遇到 Yarn 安裝異常,或想強制重新下載套件,可以清除 Yarn 的快取:

yarn cache clean

📌 適用版本: Yarn v1, v2, v3

清除所有快取的 npm 套件,提高安裝穩定性。
如果安裝遇到奇怪的問題(例如:某些套件安裝失敗或版本不匹配),建議執行此指令後再重新安裝。

安裝專案相依性,但不變更 yarn.lock(CI/CD 推薦)

在 CI/CD(持續整合/部署)環境中,為了確保專案相依性與 yarn.lock 一致,不應自動變更 yarn.lock,可以使用:

yarn install --frozen-lockfile

📌 適用版本: Yarn v1, v2, v3

確保 yarn.lock 沒有變更,若有變更則報錯,防止不一致的相依性版本被安裝。
適合 CI/CD、自動化部署,確保安裝的版本與 yarn.lock 完全相符。


Yarn v1、v2、v3 指令對應表

指令Yarn v1Yarn v2Yarn v3
初始化專案yarn init -yyarn init -yyarn init -y
安裝相依性yarn installyarn install 或 yarnyarn install 或 yarn
安裝套件yarn add [pkg]yarn add [pkg]yarn add [pkg]
安裝開發套件yarn add [pkg] --devyarn add [pkg] -Dyarn add [pkg] -D
移除套件yarn remove [pkg]yarn remove [pkg]yarn remove [pkg]
使用離線模式yarn install --offlineyarn install --offlineyarn install --offline
清除快取yarn cache cleanyarn cache cleanyarn cache clean
確保 yarn.lock 一致yarn install --frozen-lockfileyarn install --immutableyarn install --immutable

結論

Yarn 提供了許多實用的指令來管理專案相依性,並且不同版本的 Yarn 在指令使用上略有不同。

  • Yarn v1 依賴 node_modules/,較接近 npm 的使用方式。
  • Yarn v2+(Berry) 採用 PnP,不使用 node_modules/,效能更優化,但可透過 nodeLinker 設定回傳統模式。
  • 在 CI/CD 環境中,推薦使用 yarn install --frozen-lockfileyarn install --immutable 來確保相依性一致。

結論

Yarn 是一款強大且高效的 JavaScript 套件管理器,相較於 npm,Yarn 具備更快的安裝速度、更好的相依性管理能力,並提供更高的安全性與離線安裝功能。

如果你是一名 JavaScript 開發者,學會使用 Yarn 將能幫助你更流暢地管理專案的相依性,提升開發效率!快試試吧 🚀!

Similar Posts