关于前端:patchpackage-对npm包打补丁

3次阅读

共计 1255 个字符,预计需要花费 4 分钟才能阅读完成。

一. 背景

在团队开发的我的项目中,个别会依赖很多 npm 包。有这样一种状况:咱们想在某个 npm 包中本人增加一段代码,以实现某个想要的性能。
但这个包是其他人开发的,无奈批改源码。这种状况下应该怎么做呢?

  1. 如果晓得仓库地址,能够间接 fork 仓库到本人的仓库中,批改代码后本人保护这个仓库 - 发包,并应用。
  2. 也有一种更灵便的形式,应用 patch-package 对 npm 包打补丁

二. patch-package 应用

官网

1. 装置

// 官网举荐同时装置 postinstall-postinstall
yarn 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 目录中,找到要批改的包 - 具体的文件,增加批改内容后,
首先在本地开发查看批改是否失效:
这里要留神两点:

  1. 如果这个包同时有 src 目录和 lib 或叫 dist 目录,那可能要批改 lib 或 dist 目录下的文件,改变能力失效。因为最终执行的应该是拿 src 代码去构建失去的 lib/dist 目录下的文件。
  2. 批改完 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 重新安装依赖

这两部操作后,会重新安装依赖,依照冀望,也会主动运行补丁使之失效。这样之后在本地启动我的项目,改变仍然存在,就阐明改变胜利了。

正文完
 0