修改依赖库
在开发时,当我们发现使用的依赖库有 bug,需要修改,一般都有这几种处理方式:
- fork 源码,修复 bug 然后提交 pr,等待作者合并,发布新版本
- 提 issue 等待作者修复(跟方式1类似)
- 使用 patch-package 打补丁,安装依赖后自动打上修改的内容
显然方法 1 和方法 2 在紧张的开发阶段是不大现实的,因为我们不能确定作者能否即使修改。因此使用方法 3 更为合理。在 pnpm v7.4.0版本中,pnpm 添加了 pnpm patch 和 pnpm patch-commit,支持给依赖打补丁。
大致的修改流程也比较简单:
- 通过命令(pnpm i)拷贝一份依赖库的文件项目,然后用户对该拷贝的项目进行修改,
- 通过提供的命令对修改后的代码以及原来的代码进行diff,生成一个xxx.patch的文件,对应项目的 package.json 会有个 pnpm.patchedDependencies 字段来指向 patch 文件,之前其他人安装依赖后,会自动使用到该 patch。
通过 pnpm patch xxx@xxx 命令可以让我们开辟一个临时编辑目录让我们能编辑需要 patch 的依赖包。
以 connect 为例,我们可以打开这个临时目录,并在这个项目中进行更改。
我们在 use 方法中加一个打印:
之后运行 pnpm patch-commit xxx 把修改提交到工作区的 node_module 中。
命令执行完成后,可以看到项目中生成了一个 patches/connect@3.7.0.patch 的文件:
同时在 package.json 中也增加了如下配置:
在 node_modules/connect 中也可以看到我们的依赖包里的文件也是同步修改了的。
之后我们在项目中使用到的 connect 库就是修改后的。当我们发布自己的包后,其他人在通过 pnpm install 命令下载的时候也会拉取到我们修改后的依赖包。
除了上述的方法,也可以将公有依赖 fork 到私有仓库,之后通过 URI 的方式进行安装,如:
如果我们安装 lodash 这个库的话,除了使用包名安装,还可以直接通过 URI 的形式
"dependencies": {
"my-loadsh": "git+https://github.com/leo/lodash.git"
},
如果我们想移除修改,把对应的 patch 文件删除,并把 package.json 里 patchedDependencies 对应的依赖也删除,之后通过 pnpm install 重新安装。