修改 node_modules 依赖包源码,利用 patch-package 制作该 npm 模块包的补丁
在日常开发中经常会遇到,npm依赖模块升级后有点小问题或者不符合我们的场景。
通常的解决方案,是提交一个issue或者PR,等待作者修改,又或者copy源码到本地,修改依赖指向本地。
这两种方案,都有明显的缺点,不是等待时间太久,就是太过暴力。
这里推荐一个新的方案:patch-package 做个临时补丁
patch-package适用于对npm包简单的修改,它能在不copy源码修改依赖的前提下,将修改记录下来,利用git进行管理,保证修改在组内小伙伴间一致。
- 安装 patch-package
npm i patch-package -S
- 制作补丁
下面我们用 systemjs 这个模块做为案例
安装 systemjs
npm i systemjs -S
修改 node_modules 源码包
// node_modules/systemjs/dist/system-node.cjs
// 添加测试代码
function addCodeTest() {
return 'https://www.ifrontend.net/'
}
- 生成补丁
npm i patch-package -S
同时会发现根目录生成了一个补丁包
到目前为止补丁包就已经打好了,那怎么运用。因为你这改的源码,只是在你本机生效,如何共享给你的小伙伴,让他们重新安装 systemjs 模块,同样能有新加的函数了。
// package.json 新增
"scripts": {
"postinstall": "patch-package"
},
当然那个补丁包也是必不可少的
这样小伙伴拿到你的工程代码,重新 install 就可以了
npm install 后,会执行该命令 postinstall 替换补丁源码
注意:
patch 是锁定版本号的,如果升级了版本,patch 内容将会失效,需要在 package.json 锁定补丁模块的版本号
"dependencies": {
"systemjs": "6.11.0"
}
这里以 systemjs 为例 ,锁定的是 6.11.0 版本