跳到主要内容
pnpm
文档目录

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

可以按版本范围对依赖打补丁。优先级顺序为:

  1. 精确版本(最高优先级)
  2. 版本范围
  3. 仅包名的补丁(除非被覆盖,否则适用于所有版本)

特殊情况:版本范围 * 的行为类似仅包名的补丁,但不会忽略补丁失败。

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),如有出入以英文原文为准。