pnpm patch: 魔改第三方包(本地)

546 阅读1分钟

简述

对于第三方包代码魔改方案,pnpm 提供基于 pnpm patch 的解决方案,具体参考下方指令。

# 生成包的修改路路径(pnpm > v7)
pnpm patch <package-name><package-version>

# 保存修改的 diff 信息
pnpm patch-commit <file-path>

# 移除修改的 diff 信息(pnpm > v8)
pnpm patch-remove <package-name>

示例

创建项目 patch-demo 并初始化

$ pnpm init

安装依赖包

$ pnpm add electron-vite -D

此时目录结构如下

patch-demo 
├── node_modules 
├── package.json
└── pnpm-lock.yaml

创建临时补丁包

$ pnpm patch electron-vite@2.2.0

指令执行后,控制台会输出以下信息:

$ You can now edit the following folder: C:\Users\*\AppData\Local\Temp\b244c8b12b5770e13d2010c99c59bd48
$ Once you're done with your changes, run "pnpm patch-commit 'C:\Users\*\AppData\Local\Temp\b244c8b12b5770e13d2010c99c59bd48'"

修改代码

打开之前文件命令行提示的文件: C:\Users\*\AppData\Local\Temp\b244c8b12b5770e13d2010c99c59bd48,按需求修改代码。

应用补丁

pnpm patch-commit 'C:\Users\*\AppData\Local\Temp\b244c8b12b5770e13d2010c99c59bd48'"

pnpm未自动重构依赖,需手动 pnpm rebuild

查看 patch 结果

patch 成功后,会新增 patches 目录。

patch-demo 
├── node_modules 
├── patches
│ ├── electron-vite@2.2.0.patch
├── package.json
└── pnpm-lock.yaml

同时 package.json 新增字段如下:

{
  "pnpm": {
    "patchedDependencies": {
      "electron-vite@2.2.0": "patches/electron-vite@2.2.0.patch"
    }
  }
}

完结。

补充:若未使用 pnpm 做包管理器,请参考第三方包 pathc-package 的使用。

参考文档:pnpm.io/cli/patch