使用 patch-package 修改第三方依赖库

前端项目开发中会使用到大量的第三方依赖库,有时会遇到第三方依赖库质量不行的情况,存在 bug,走提交 pr 合进 master 的流程过于冗长,复制一份变成本地依赖又太臃肿,这些方法都不是很好的解决方案。这次介绍的 patch-package 库通过生成代码补丁的方式,对第三方库源码进行修改,和前两种方法相比,更加轻便优雅。

patch-package

patch-package 是一个专门用来修改 npm 第三方依赖库的工具库。先把它加到依赖库里,然后直接在 node_modules 目录下修改目标第三方库,运行 npx patch-package target-package-name 命令,便会生成一个 patch 文件,里面记录了所做的改动。之后只要运行 patch-package 命令变能把补丁应用到目标第三方库。

工作原理

它的工作原理其实通过它打印的日志就能明白,patch-package 会比较本地代码和原始代码,生成 patch 文件。还有一个问题,patch 有了,但我们不可能每次手动去应用这些补丁,需要找一个合适的生命周期函数来做这个事情,通常是 postinstall,它能保证在它执行之前,一个 npm 包已经成功地安装在磁盘上。

可能的坑

我在项目上实践这个方法时,遇到一个坑,本地环境可以生效,但是线上环境却一直有问题。排查下来,发现是部署的流水线失败了,解决办法是修改 npm 配置,在 .npmrc 文件添加一个配置项 unsafe-perm,成功解决问题。

1
unsafe-perm = true