一.背景
在团队开发的我的项目中,个别会依赖很多npm包。 有这样一种状况:咱们想在某个npm包中本人增加一段代码,以实现某个想要的性能。
但这个包是其他人开发的,无奈批改源码。这种状况下应该怎么做呢?
- 如果晓得仓库地址,能够间接fork仓库到本人的仓库中,批改代码后本人保护这个仓库-发包,并应用。
- 也有一种更灵便的形式,应用 patch-package 对npm包打补丁
二. patch-package 应用
官网
1. 装置
// 官网举荐同时装置 postinstall-postinstallyarn add patch-package postinstall-postinstall
官网举荐 将postinstall-postinstall和patch-package一起装置。
起因简略总结就是:
只有patch-package时,运行yarn / yarn add packageA ,会主动运行补丁,使之失效。但运行 yarn remove,就不会主动运行补丁。 因而postinstall的作用就是补救在执行yarn remove后,也能够使补丁失效。
2. 在package.json中增加命令
"scripts": { "postinstall": "patch-package" }
3. 批改npm包
从node_modules目录中,找到要批改的包-具体的文件,增加批改内容后,
首先在本地开发查看批改是否失效:
这里要留神两点:
- 如果这个包同时有src目录和lib或叫dist目录,那可能要批改lib或dist目录下的文件,改变能力失效。因为最终执行的应该是拿src代码去构建失去的lib/dist目录下的文件。
- 批改完node_modules中的代码后,应该要重启本地开发,在本地才会用新代码运行
在本地能够先确认好要批改的文件,批改胜利,达到想要的成果后,就能够打补丁了:
4. 打补丁
须要手动执行命令:yarn patch-package your-package-name
运行这个命令后,在我的项目的根目录下会生成 patchs 目录,
目录下生成一个 package-name+x.x.x .patch 文件,即包名+版本号,以.patch为后缀的一个文件。
关上该文件,能够看到文件的内容,是记录了批改前后的diff,不同之处。
5. 提交改变并验证
改变其实就是多了一个patchs目录,及其下的patch文件-记录包的改变点。
须要 git add commit push 操作,将patch文件推到近程仓库。
咱们下面只是在本地,运行的是咱们改变的node_modules中的代码,改变会失效。
然而node_modules中的依赖并不会上传到近程仓库,咱们应用yarn装置依赖的时候,只是会依据package.json中包的版本号装置。
为了验证他人是否能感知到我对这个包的改变,能够进行一下验证:
rm -rf node_modules/ 删除本地的依赖
yarn 重新安装依赖
这两部操作后,会重新安装依赖,依照冀望,也会主动运行补丁使之失效。这样之后在本地启动我的项目,改变仍然存在,就阐明改变胜利了。