全部速查表前端開發

yarn

Yarn 1.x (classic) / Yarn 4 (berry)

日常 Yarn CLI 命令快速參考(涵蓋 Yarn Classic 1.x 與 Yarn Berry 2/3/4):install/add/remove/run/workspaces、lockfile、Plug'n'Play,以及 Berry 設定——附常用參數與實作範例。

33 條命令

安裝(Classic 1.x)

yarn install

安裝 `package.json` 中列出的所有依賴,建立或更新 `node_modules` 與 `yarn.lock`。

--frozen-lockfile 若 lockfile 會改動則失敗(CI 用);--production / --prod 略過 devDeps;--no-progress;--silent

yarn install --frozen-lockfile
yarn install --frozen-lockfile

僅當 `yarn.lock` 與 `package.json` 完全一致時才安裝。CI 中用來保證可重現的建置。

yarn install --frozen-lockfile

安裝(Berry)

yarn install

Berry 預設:當 `.yarnrc.yml` 中設定 `nodeLinker: pnp` 時使用 Plug'n'Play,否則退回 `node_modules`。快取於 `.yarn/cache`。

--immutable 當 lockfile 有出入時失敗(Berry 版的 --frozen-lockfile);--inline-builds;--mode=update-lockfile

yarn install --immutable
yarn set version <version>

切換專案中的 Yarn 執行檔。常見:`yarn set version stable`、`yarn set version 4.0.2`、`yarn set version classic`。

yarn set version stable

新增依賴

yarn add <pkg>

新增執行階段依賴,並寫入 `package.json` 與 lockfile。Classic 會寫入 `dependencies`,Berry 亦同。

<pkg>@<版本|範圍>;--dev / -D;--exact / -E;--optional / -O;--peer

yarn add lodash && yarn add -D typescript@^5 vitest
yarn add -D <pkg>

加入 `devDependencies`。

yarn add -D typescript @types/node eslint
yarn add <pkg>@<version>

安裝特定版本、dist-tag(`@latest`、`@next`、`@canary`),或 git URL。

yarn add [email protected] && yarn add next@latest
yarn global add <pkg>

全域安裝工具(Classic 1.x)。Berry 對一次性執行檔使用 `yarn dlx`,建議全域工具用 `corepack`。

yarn global add typescript

移除

yarn remove <pkg>

從 `node_modules` 與對應的 `dependencies`/`devDependencies` 區段移除套件。

yarn remove lodash && yarn remove -D @types/node

更新

yarn upgrade

在目前 semver 範圍內升級所有依賴;`yarn upgrade --latest` 會跳到最新可用版本並重寫範圍。

--latest;--pattern <glob>;--caret;--exact;-i / --interactive

yarn upgrade && yarn upgrade eslint --latest
yarn upgrade <pkg>@<version>

把單一套件升級到特定版本。

yarn upgrade [email protected]

執行指令稿

yarn run <script>

執行 `package.json` 中定義的指令稿。`yarn test`、`yarn start`、`yarn build` 是簡寫。

-- <args> 將參數轉發給指令稿

yarn run build -- --mode production
yarn <script>

等同 `yarn run <script>`——直接以名稱呼叫任何已定義的指令稿,免去 `run` 關鍵字。

yarn test && yarn lint:fix
yarn dlx <pkg> [args]

不本地安裝而直接執行套件的執行檔(Berry 版的 `npx`)。快取於 `~/.yarn/berry/cache`。

-p / --package 選擇套件;-q / --quiet

yarn dlx create-vite my-app --template vue

Workspaces

yarn workspaces add <pkg>

把依賴加到 monorepo workspace 的根目錄(1.x)。

yarn workspaces add typescript -D
yarn workspace <ws> add <pkg>

把依賴加到 monorepo 內單一具名 workspace。

yarn workspace @myorg/web add react && yarn workspace @myorg/api add -D vitest
yarn workspaces run <script>

在每個 workspace 中執行指令稿。Berry 的 `yarn workspaces foreach run <script>` 支援並行與拓樸順序。

--parallel;--topological;--continue;--interlaced

yarn workspaces foreach run build --topological --parallel

檢視

yarn list

印出依賴樹。`--pattern <regex>` 可過濾;`--depth 0` 只顯示直接依賴。

--depth=N;--pattern;--json

yarn list --depth=0 && yarn list --pattern "^react$"
yarn why <pkg>

說明為何某套件會被安裝——列出帶入它的依賴鏈。

yarn why react && yarn why @types/node
yarn info <pkg>

印出套件的 registry metadata——版本、依賴、dist-tags、README 摘錄。大致等同 `npm view`。

<pkg>@<version>;<pkg> readme;<pkg> dependencies

yarn info react dist-tags && yarn info lodash versions
yarn licenses list

列出整個依賴樹中每個授權(SPDX 識別碼 + 作者)。授權合規審查時很有用。

yarn licenses list

Berry 設定

yarn config set <key> <value>

把設定寫入 `.yarnrc.yml`(Berry)。常見鍵:`nodeLinker`、`npmRegistryServer`、`enableTelemetry`、`yarnPath`。

yarn config set nodeLinker node-modules && yarn config set enableTelemetry false
yarn config get <key>

讀取單一設定項。

yarn config get nodeLinker

快取

yarn cache clean

清除 Yarn 快取(Classic:`~/.yarn-cache`;Berry:`.yarn/cache`)。

yarn cache clean
yarn cache dir

印出快取目錄路徑。

yarn cache dir

Lockfile

yarn import

僅 Berry——從 npm 的 `package-lock.json` 匯入成 Yarn 的 lockfile 格式。

yarn import
yarn constraints

僅 Berry——強制執行以 Prolog 寫在 `constraints.pro` 中的專案級依賴規則(例如每個 workspace 必須使用相同 React 版本)。

yarn constraints

稽核

yarn npm audit

Berry——代理至 npm registry 的公告來源。回報 lockfile 中的漏洞。

--severity info|low|moderate|high|critical;--json

yarn npm audit --severity high

雜項

yarn version

印出目前 Yarn 版本(Classic 與 Berry 都適用)。

yarn version
yarn init

互動式或 `-y` 接受預設值建立 `package.json`。

-y 接受預設;-p / --private 標記為私有

yarn init -y
yarn pack

把當前套件打包成 tarball 而不發佈——適合離線發佈。

--filename;--pack-destination <dir>

yarn pack --filename my-pkg.tgz

Plug'n'Play(Berry)

yarn unplug <pkg>

把單一套件從 PnP zip 儲存區解出到一般的 `node_modules/<pkg>`,使其能以傳統方式 require(用於解決不相容工具)。

yarn unplug react && yarn install
yarn rebuild

為目前 Node ABI 重新編譯原生 addons。Berry 在 PnP 下處理含原生依賴的套件時需要此指令。

yarn rebuild

相關命令速查

關於 Yarn

Yarn 由 Facebook(Meta)於 2016 年 10 月發佈,作為比 npm 更快、更具確定性的替代方案,並有 Google、Exponent、Tilde 共同貢獻。原始的 1.x 線現稱為「Yarn Classic」,處於維護模式;活躍線為「Yarn Berry」(2020 年的 2.0、2021 年的 3.0、2022 年的 4.0,今日為 5.x)。Yarn Berry 內建 `yarn`(單一 4 MB、嵌入 Node 的執行檔)、`yarn dlx`(npx 取代品)、`yarn workspaces`、Plug'n'Play(`yarn install --immutable` 加上 `.pnp.cjs`)——一個有爭議的預設,它不安裝 `node_modules`,而是從單一 zip 儲存區解析套件。Berry 以 `yarnrc.yml`(YAML)設定,與 Classic 的 `yarnrc`(ini)不同。兩個版本可在同一台機器共存:`yarn set version classic` 與 `yarn set version berry` 會切換執行檔。Yarn 安裝速度比 npm 快(並行 + 快取),支援 monorepo 的 `workspaces` 與 `constraints`,並內建 `yarn why`/`yarn licenses` 自省功能。不會向 Meta 傳送任何資料——Yarn 是獨立的 OSS,採 BSD-2-Clause 授權。

速查頁版本 1.0.0