简述
对于第三方包代码魔改方案,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