Package bug处理方式

Package bug

1. 使用补丁工具

patch-package

  1. 安装:npm install patch-package postinstall
  2. 添加脚本:
1
2
3
4
5
6
{
"scripts": {
"postinstall": "patch-package"
}
}

  1. 修改 node_modules 中的代码
  2. 生成补丁文件
    修改完代码后,你需要使用 patch-package 生成一个补丁文件来记录你的修改。补丁文件会记录你对 node_modules 中依赖包的更改,并保存为 .patch 文件。
1
2
npx patch-package some-package

这将生成一个补丁文件,并将其保存在项目根目录下的 patches/ 文件夹中。补丁文件的命名格式通常是:+.patch

  1. 确保补丁文件生效
    在补丁文件生成后,你不需要做任何手动的应用操作,因为 postinstall 脚本已经配置好了,它会确保每次执行 npm install 时自动应用补丁。

生成新文件:<package-name>+<version>.patch,保存在patches目录下
在项目的package.json文件中,在scripts部分添加一个postinstall脚本,例如:"postinstall": "patch-package"。这样每次安装依赖时,都会自动应用补丁

2. 手动修改并使用本地版本

  1. 找到有问题的包在项目的node_modules目录中的位置。
  2. 复制该包的整个目录到项目中的其他位置,比如src/vendorPatched
  3. 对复制出来的版本进行手动修改以修复 bug。
  4. 在项目代码中,使用相对路径导入修改后的本地版本,而不是从node_modules中导入原始有问题的版本。例如,如果是一个 JavaScript 模块,可以使用import { someFunction } from '../vendorPatched/some-package/some-file.js';

3. 使用 fork 和替代源

如果 package 是开源的,可以在代码平台进行 fork

对 fork 后的项目进行 bug 修复,推送上去

在 package.json 中将有问题的 package 依赖地址指向 fork 后的地址,例如:

1
"some-package": "git+https://github.com/your-username/forked-package.git"

4. 通过脚本 copy 覆盖

还是用postinstall这个勾子,在这个勾子执行cp修改过的文件  ./node_modules/包名/原始文件拷贝过去,最终node_modules下的文件就变成了修改后的文件了,比如:

1
2
3
"scripts": {
"postinstall": "cp ./patches/upload/* ./node_modules/antd/lib/"
}

修改引用
配置一个webpack alias别名,如'原始文件的引用路径': '修改后文件的引用路径',使得最终修改后的文件被引用,如:

1
2
3
4
5
resolve: {
alias: {
'antd/upload': path.resolve(__dirname, './patched/upload/*'),
}
}