pnpm patch <pkg>
为包打补丁做准备(灵感来自 Yarn 中的类似命令)。
此命令会将包解压到一个临时目录,供你随意编辑。
完成修改后,运行 pnpm patch-commit <path>(<path> 为你收到的临时目录)以生成补丁文件,并通过 patchedDependencies 字段将其注册到顶层 manifest。
Usage:
pnpm patch <pkg name>@<version>
选项
--edit-dir
需要打补丁的包会被解压到此目录。
--ignore-existing
打补丁时忽略已有的补丁文件。
配置
patchedDependencies
运行 pnpm patch-commit 时会自动添加/更新此字段。它使用一个字典来定义依赖的补丁,其中:
- 键:包名,可带精确版本、版本范围,或仅为包名。
- 值:补丁文件的相对路径。
Example:
patchedDependencies:
express@4.18.1: patches/express@4.18.1.patch
可以按版本范围对依赖打补丁。优先级顺序为:
- 精确版本(最高优先级)
- 版本范围
- 仅包名的补丁(除非被覆盖,否则适用于所有版本)
特殊情况:版本范围 * 的行为类似仅包名的补丁,但不会忽略补丁失败。
Example:
patchedDependencies:
foo: patches/foo-1.patch
foo@^2.0.0: patches/foo-2.patch
foo@2.1.0: patches/foo-3.patch
patches/foo-3.patch应用于foo@2.1.0。patches/foo-2.patch应用于所有匹配^2.0.0的 foo 版本,2.1.0除外。patches/foo-1.patch应用于所有其他 foo 版本。
避免版本范围重叠。如果你需要对某个子范围单独处理,请从更宽的范围中显式排除它。
Example:
patchedDependencies:
# Specialized sub-range
"foo@2.2.0-2.8.0": patches/foo.2.2.0-2.8.0.patch
# General patch, excluding the sub-range above
"foo@>=2.0.0 <2.2.0 || >2.8.0": patches/foo.gte2.patch
大多数情况下,定义精确版本就足以覆盖更宽的范围。
allowUnusedPatches
自 v10.7.0 起提供(曾用名 allowNonAppliedPatches)
- 默认值:false
- 类型:Boolean
为 true 时,即使 patchedDependencies 字段中的部分补丁未被应用,安装也不会失败。
patchedDependencies:
express@4.18.1: patches/express@4.18.1.patch
allowUnusedPatches: true
本页内容译自pnpm 官方文档(MIT License),如有出入以英文原文为准。