Bun

修补依赖项

bun patch 允许你以可维护、对 git 友好的方式持久地修补 node_modules。

有时,你需要对 node_modules/ 中的包进行少量更改以修复错误或添加功能。bun patch 使这变得容易,无需导入整个包,并可以在多次安装、多个项目和多台机器上重用该补丁。

功能

  • 生成在安装时应用于 node_modules 中依赖项的 .patch 文件
  • .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 和 lockfile,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> 标志或选项

Flags

补丁生成

--commit
安装包含 `dir` 中修改的包
--patches-dir=<val>
放置补丁文件的目录(仅当使用 --commit 时)

依赖项控制

-p,--production
不安装 devDependencies
--ignore-scripts
跳过项目 package.json 中的生命周期脚本(依赖项脚本永远不会运行)
--trust
添加到项目 package.json 中的 trustedDependencies 并安装包。
-g,--global
全局安装
--omit=<val>
从安装中排除 'dev'、'optional' 或 'peer' 依赖项

锁文件 & Package.json

-y,--yarn
写入 yarn.lock 文件 (yarn v1)
--no-save
不更新 package.json 或保存锁定文件
--save
保存到 package.json(默认为 true)
--frozen-lockfile
不允许修改锁定文件
--save-text-lockfile
保存基于文本的锁定文件
--lockfile-only
生成锁定文件而不安装依赖项

安装策略

--backend=<val>
用于安装依赖项的特定于平台的优化。可能的值:“clonefile”(默认值)、“hardlink”、“symlink”、“copyfile”。
--linker=<val>
链接器策略(“isolated”或“hoisted”之一)

Network & Registry

--ca=<val>
提供一个证书颁发机构签名证书。
--cafile=<val>
与 `--ca` 相同,但指向证书的文件路径。
--registry=<val>
默认使用特定的注册表,覆盖 .npmrc、bunfig.toml 和环境变量。

Caching

--cache-dir=<val>
从特定目录路径存储和加载缓存数据。
--no-cache
完全忽略清单缓存。

执行控制

--dry-run
不安装任何东西
-f,--force
始终从注册表请求最新版本并重新安装所有依赖项
--no-verify
跳过验证新下载包的完整性

Output & Logging

--silent
不记录任何内容。
--quiet
打包时仅显示 tarball 名称。
--verbose
非常详细的日志记录。
--no-progress
禁用进度条。
--no-summary
不打印摘要。

Performance & Concurrency

--concurrent-scripts=<val>
生命周期脚本的最大并发作业数(默认 5)
--network-concurrency=<val>
最大并发网络请求数(默认 48)

平台目标

--cpu=<val>
为可选依赖项覆盖 CPU 架构(例如,x64、arm64、* 表示所有)。
--os=<val>
为可选依赖项覆盖操作系统(例如,linux、darwin、* 表示所有)。

配置 & 上下文

-c,--config=<val>
指定配置文件路径 (bunfig.toml)
--cwd=<val>
设置特定的 cwd

一般信息

-h,--help
打印此帮助菜单

Examples

准备 jquery 进行修补
bun patch jquery
生成 jquery 更改的补丁文件
bun patch --commit 'node_modules/jquery'
为 jquery 更改在自定义目录中生成补丁文件
bun patch --patches-dir 'my-patches' 'node_modules/jquery'
完整文档可在 https://bun.net.cn/docs/install/patch 找到。