Bun

修補相依性

bun patch 可讓您以可維護、對 git 友善的方式,持久地修補 node_modules。

有時,您需要對 node_modules/ 中的套件進行小幅更改,以修正錯誤或新增功能。bun patch 讓您可以輕鬆完成此操作,而無需將整個套件複製出來,並在多個安裝、多個專案和多部機器上重複使用修補程式。

功能特色

  • 產生 .patch 檔案,在安裝時套用至 node_modules 中的相依性
  • .patch 檔案可以提交到您的儲存庫,在多個安裝、專案和機器之間重複使用
  • package.json 中的 "patchedDependencies" 追蹤已修補的套件
  • bun patch 可讓您修補 node_modules/ 中的套件,同時保持 Bun 全域快取的完整性
  • 在提交變更之前,先使用 bun patch --commit <pkg> 在本機測試您的變更
  • 為了節省磁碟空間並保持 bun install 的速度,修補後的套件會提交到全域快取,並在可能的情況下在專案之間共用

步驟 1. 準備要修補的套件

若要開始,請使用 bun patch <pkg> 準備要修補的套件

# you can supply the package name
bun patch react

# ...and a precise version in case multiple versions are installed
bun patch react@17.0.2

# or the path to the package
bun patch node_modules/react

注意 — 別忘了呼叫 bun patch <pkg>!這可確保 node_modules/ 中的套件資料夾包含套件的全新副本,且沒有指向 Bun 快取的符號連結/硬連結。

如果您忘記執行此操作,您最終可能會在快取中全域編輯套件!

步驟 2. 在本機測試您的變更

bun patch <pkg> 可以安全地直接編輯 node_modules/ 中的 <pkg>,同時保持 Bun 全域快取的完整性。其運作方式是在 node_modules/ 中重新建立未連結的套件副本,並將其與全域快取中的原始套件進行差異比較。

步驟 3. 提交您的變更

對您的變更感到滿意後,請執行 bun patch --commit <path or pkg>

Bun 將在 patches/ 中產生修補程式檔案,更新您的 package.json 和鎖定檔,Bun 將開始使用修補後的套件

# you can supply the path to the patched package
bun patch --commit node_modules/react

# ... or the package name and optionally the version
bun patch --commit react@17.0.2

# choose the directory to store the patch files
bun patch --commit react --patches-dir=mypatches

# `patch-commit` is available for compatibility with pnpm
bun patch-commit react

CLI 用法

$bun patch <package>@<version> 旗標或選項

旗標

設定

-c,--config=<val>
指定設定檔路徑 (bunfig.toml)
--registry=<val>
預設使用特定的 registry,並覆蓋 .npmrc、bunfig.toml 和環境變數。

相依性管理

-y,--yarn
寫入 yarn.lock 檔案 (yarn v1)
-p,--production
不要安裝 devDependencies
--no-save
不要更新 package.json 或儲存 lockfile
--save
儲存至 package.json (預設為 true)
--omit=<val>
從安裝中排除 'dev'、'optional' 或 'peer' 相依性

Lockfile 管理

--frozen-lockfile
不允許變更 lockfile
--save-text-lockfile
儲存文字型 lockfile
--lockfile-only
產生 lockfile 但不安裝相依性

安裝行為

-f,--force
總是從 registry 要求最新版本並重新安裝所有相依性
--dry-run
不要安裝任何東西
--ignore-scripts
跳過專案 package.json 中的生命週期腳本 (相依性腳本永遠不會執行)
--trust
新增至專案 package.json 中的 trustedDependencies 並安裝套件

快取與效能

--cache-dir=<val>
從特定目錄路徑儲存和載入快取資料
--no-cache
完全忽略 manifest 快取
--concurrent-scripts=<val>
生命週期腳本的最大並行任務數 (預設 5)
--network-concurrency=<val>
最大並行網路請求數 (預設 48)
--backend=<val>
安裝相依性的平台特定最佳化。可能的值:"clonefile" (預設)、"hardlink"、"symlink"、"copyfile"

日誌與輸出

--silent
不要記錄任何日誌
--verbose
過於冗長的日誌記錄
--no-progress
停用進度條
--no-summary
不要印出摘要

安全性與驗證

--ca=<val>
提供憑證授權單位簽署憑證
--cafile=<val>
與 `--ca` 相同,但這是憑證的檔案路徑
--no-verify
跳過驗證新下載套件的完整性

工具

-g,--global
全域安裝
--cwd=<val>
設定特定的 cwd
-h,--help
印出此說明選單

修補

--commit
安裝包含 `dir` 中修改的套件
--patches-dir=<val>
放置修補程式檔案的目錄 (僅在使用 --commit 時)

範例