用patch-package给node_module中的包打补丁
问题描述:在项目中用到一个第三方库,但这个库有个bug并且已经影响到了你的项目,需要修改这个库的源码才能解决。
一般的解决方案:
- 方案一:提issue或者pr,联系作者修改;
- 方案二:下载该库的源码到本地 ,放在src目录,修改后手动引入
- 方案三:fork该库的代码到自己仓库,修改后,从自己仓库安装这个插件
这三种方案都比较暴力以及繁琐,都不是最优解。最优解是通过patch-package
打补丁。
1.安装patch-package
1npm install patch-package --save-dev2或者3yarn add patch-package postinstall-postinstall4(npm安装不需要postinstall-postinstall依赖)
2.修改本地项目的package.json文件,增加命令
1 "postinstall": "patch-package"
3.到node_modules中找到对应的库,并修改源码
4.手动执行命令,创建补丁文件
1// 创建补丁文件2npx patch-package package-name
这时候会在项目根目录下多出一个文件夹:patches
patches文件夹下的文件是以package-name + version
命名的文件。
删除node_module,然后重新安装依赖,检查补丁是否生效。
patch是锁定版本号的,如果升级了版本,patch内容将会失效,所以要锁定package.json中的版本号。
yarn包管理器有yarn.lock文件锁定依赖版本。锁定依赖