有时候 node_modules 中的第三方包有问题或需要修改几行源码,我们可以怎么办?
去给作者提 issues?可能得不到回复。
自己在 node_modules 里直接修改源码?下一次重新安装包,或者其他同事 install 的时候,被修改过的源码又恢复如初了。
不用他的包,自己写一个?……
社区提供了一个工具:patch-package,专门用来处理修改 node_modules 包源码的问题。
基本使用
使用方法如下,注意 yarn、npm 使用时的差异,推荐使用 yarn。
安装 patch-package
# yarn 需要多安装一个包 postinstall-postinstall,https://github.com/ds300/patch-package#why-use-postinstall-postinstall-with-yarn yarn add patch-package postinstall-postinstall -D # or # npm npm i patch-package -D
在 package.json 的 scripts 中增加如下命令:
"scripts": { + "postinstall": "patch-package" }
postinstall
是 npm 的钩子,会在依赖包被install
之后被执行。上面两步都做了,就可以去修改 node_modules 里任意第三方包的源码了。
修改了源码,随后需要执行以下命令:
# [package-name] 是包名,不需要写路径。 yarn patch-package [package-name] # or npx patch-package [package-name]
命令执行成功后,会发现项目根目录下多了一个文件夹
patches
,该目录下多了文件,即为记录源码修改的文件。将
patches
目录及文件,通过 git 提交到代码仓库。Over,后续其他同学不需要做额外操作,直接安装即可,node_modules 下的源码修改会自动更新。
之前已经安装过该第三方包的同学,需要卸载,重新安装一次。
如果后续还有其它包也需要修改源码,修改过后,再执行一次命令:
yarn patch-package [package-name] # or npx patch-package [package-name]
直接提交 issues
完成上述步骤后,你甚至可以通过一行命令向第三方包提交 issues。
示例截图:
其它
过程中遇到一个错误,记录一下,其他人不一定会遇到。
macos 在终端报如下错误:
可以参照这个文档解决:https://www.cnblogs.com/start-fxw/p/10192226.html
终端运行如下命令:
xcode-select --install
更新一下 xcode 即可。