bun 補丁
以對 git 友好的方式持久化修補 node_modules 包
bun patch 以可維護、對 Git 友好的方式持久化修補 node_modules 中的包。
有時你需要對 node_modules/ 中的包進行小幅修改,以修復 bug 或新增功能。bun patch 讓你無需將整個包納入專案即可完成這些操作。
功能特點:
- 生成
.patch檔案,Bun 會在安裝時將其應用於node_modules中的相依項 - 你可以將
.patch檔案提交到儲存庫,並在不同的安裝、專案和機器之間重複使用 package.json中的"patchedDependencies"會跟蹤已修補的包- 修補
node_modules/中的包,同時保留 Bun Global Cache 的完整性 - 使用
bun patch --commit <pkg>提交修改前,可在本地測試修改 - 為了節省磁碟空間並加快
bun install,Bun 會將修補後的包提交到 Global Cache,並儘可能在多個專案之間共享
第 1 步. 準備包進行補丁
使用 bun patch <pkg> 準備要修補的包:
# 你可以直接提供包名
bun patch react
# 如果安裝了多個版本,可以指定精確版本
bun patch react@17.0.2
# 也可以提供包的路徑
bun patch node_modules/react
第 2 步. 本地測試你的修改
bun patch <pkg> 讓你可以直接安全地編輯 node_modules/ 中的 <pkg>,同時保留 Bun Global Cache 的完整性。它會在 node_modules/ 中重新建立一個沒有連結的包副本。隨後,bun patch --commit <pkg> 會將該副本與 Global Cache 中的原始包進行差異比較。
第 3 步. 提交修改
當你滿意修改後,執行 bun patch --commit <路徑或包名>。
Bun 會在 patches/ 中生成補丁檔案,更新你的 package.json 和鎖檔案,並開始使用修補後的包:
# 你可以提供已修補包的路徑
bun patch --commit node_modules/react
# 或只是包名,外加可選版本號
bun patch --commit react@17.0.2
# 指定存放補丁檔案的目錄
bun patch --commit react --patches-dir=mypatches
# 為相容 pnpm,可使用 patch-commit
bun patch-commit react
CLI 使用說明
bun patch <package>@<version>
補丁生成
--commitboolean安裝包含 dir 中修改內容的包
--patches-dirstring補丁檔案存放目錄(僅當使用 --commit 時生效)
相依管理
--productionboolean不安裝 devDependencies。別名:-p
--ignore-scriptsboolean跳過所有包的生命週期指令碼,包括專案的 package.json 和可信賴的相依項
--trustboolean新增到專案 package.json 的 trustedDependencies 並安裝該包
--globalboolean全域性安裝。別名:-g
--omitstring從安裝中排除 dev,optional 或 peer 相依
專案檔案與鎖檔案
--yarnboolean寫入 yarn.lock 檔案(yarn v1)。別名:-y
--no-saveboolean不更新 package.json 或儲存鎖檔案
--savebooleandefault true儲存至 package.json(預設開啟)
--frozen-lockfileboolean禁止修改鎖檔案
--save-text-lockfileboolean儲存文本格式的鎖檔案
--lockfile-onlyboolean僅生成鎖檔案,不安裝相依
安裝控制
--backendstring用於安裝相依項的平臺專屬最佳化。可能的值:clonefile(macOS 上的預設值)、hardlink(Linux 和 Windows 上的預設值)、symlink、copyfile
--linkerstring連結策略(isolated 或 hoisted 其中之一)
--minimum-release-agenumber僅安裝至少在 N 秒前釋出的包(安全功能)
--dry-runboolean不安裝包、不更新 package.json,也不儲存鎖檔案。仍會將包複製到
node_modules 以供打補丁,並且 --commit 仍會寫入補丁檔案
--forceboolean始終請求最新版本並重新安裝所有相依。別名:-f
--no-verifyboolean跳過驗證新下載包的完整性
網路與登錄檔
--castring提供證書頒發機構簽名證書
--cafilestring同 --ca,但為證書檔案路徑
--registrystring使用指定的登錄檔,覆蓋 .npmrc、bunfig.toml 及環境變數
--network-concurrencynumberdefault 48最大並行網路請求數(預設48)
效能與資源
--concurrent-scriptsnumber生命週期指令碼的最大並行任務數(預設為 CPU 核心數的 2 倍)
快取
--cache-dirstring從指定目錄儲存和載入快取資料
--no-cacheboolean完全忽略清單快取
輸出與日誌
--silentboolean不輸出任何日誌
--quietboolean停用進度條
--verboseboolean非常詳細的日誌輸出
--no-progressboolean停用進度條
--no-summaryboolean不列印摘要資訊
平臺目標
--cpustring覆蓋可選相依的 CPU 架構(例如 x64,arm64,* 表示全部)
--osstring覆蓋可選相依的作業系統(例如 linux,darwin,* 表示全部)
全域性設定與上下文
--configstring指定設定檔路徑(bunfig.toml)。別名:-c
--cwdstring設定當前工作目錄
幫助
--helpboolean列印此幫助選單。別名:-h