Skip to content
/ Guide/package.json
2/14/2024
1.6m
AI 摘要

本文介绍了 package.jsonpnpm overridepnpm patch 的使用方法。override 用于强制替换依赖版本或包,patch 用于持久化修改依赖包内容,确保每次安装都应用修改,提升开发效率。

package.json

某些情况下很好用的配置

pnpm override

设置 overrides 之后,执行 pnpm i,即可以让原本安装的依赖变为自己修改后的依赖,包括版本替换,甚至是包替换,还可以指定 registry

{
  "pnpm": {
    "override": {
      "bar@^2.1.0": "3.0.0", // 强制将 bar 的版本固定为 3.0.0
      "jsdom": "happy-dom@^12.10.3",
      "qar@1>zoo": "2" // 强制将 qar@1 的依赖 zoo 版本固定为 2
    }
  }
}

pnpm patch

有点时候,我们发现我们的某个 dependency 有 Bug,或者内部的功能与预期的稍有偏差。此时,手动修改 node_modules 下面的包的内容可能可以短暂解决你的问题,但是无法持续,重新安装依赖后,修改就被删除了

pnpm patch 可以将这种修改记录保留下来,每次执行 pnpm i 的时候,都应用这个修改,具体方式如下,假设我们要 patch vue 这个包

$ pnpm patch vue
You can now edit the following folder: /private/var/folders/pz/dncst_js0f19w1t8hwfv13mh0000gn/T/9c833ee4ec07ca8e1dc55649652081e7

Once you're done with your changes, run "pnpm patch-commit /private/var/folders/pz/dncst_js0f19w1t8hwfv13mh0000gn/T/9c833ee4ec07ca8e1dc55649652081e7"

然后我们打开它临时生成的项目,修改成我们预期的内容

修改完毕后执行上面提升的:

$ pnpm patch-commit /private/var/folders/pz/dncst_js0f19w1t8hwfv13mh0000gn/T/9c833ee4ec07ca8e1dc55649652081e7

然后 pnpm 会在 package.json 中添加如下记录,并在当前项目生成一个 patches/[email protected] 文件,里面就是修改 diff 的记录

{
  "pnpm": {
    "patchedDependencies": {
      "[email protected]": "patches/[email protected]"
    }
  },
}

也可以使用 antfu/pnpm-patch-i 获得更好的交互

Released under the MIT License.