在前端项目开发中,我们经常会遇到node_modules里的包有问题,当自己手动更改成正确的后,自己没问题了,但是别人重新npm install时还会有同样的问题,那么如何将node_modules的更改保存到项目中呢,这样别人在生成依赖后能有一个正常的环境
通过:
patch-packagewww.npmjs.com/package/patch-package正在上传…重新上传取消
这个包可以在npm install后按照项目里保存的更改自动修改node_modules,非常好用
使用步骤:
一.安装
可以使用npm
npm i patch-package -D
或yarn(postinstall-postinstall 确保在yarn remove时依旧能保持更正代码)
yarn add patch-package postinstall-postinstall
二.设置
安装完后需要给package.json设置postinstall,在安装完node_modules后会自动执行
"scripts": { "postinstall": "patch-package" }
三.使用
- 修改node_modules的内容
- npx patch-package 修改的包名(执行完成后,会在项目目录生成一个文件夹,保存着此次修改的内容)
四.可以看到patch-package已经为我们创建了一个补丁。默认会在我们的根目录下创建一个patches文件夹。在patches文件夹下会创建依赖包名+版本号.patch的文件,文件描述了我们修改了什么,第几行,有点像git的提交记录
五.测试补丁是否有效
- 手动删除node_modules文件夹,重新执行yarn安装依赖包。可以看到在依赖包安装结束后执行了patch-package命令,之前生成的补丁被应用了。因为我们配置了postinstall脚本,所以会自动执行patch-package命令
- 查看node-modules中之前修改的antd修改的地方,查看之前修改的代码是否还存在。如果之前修改的代码还存在,说明补丁文件已经生效了,如果不存在,排查下是否哪个步骤出现了问题。
- 最后将patches文件夹推送到远端仓库,日后无论是谁拉取代码,安装依赖,我们之前修改的部分都会生效的
-
注意事项
-
patch是锁定版本号的,如果升级了版本,patch内容将会失效,最好在package.json能够锁定版本号。
-
修改的同时,也局限了升级的能力,尽量还是去提issue和PR。