Skip to content

修改第三方依赖

patch-package

我们可以使用patch-package这个库来解决这类问题。一方面,它能记录第三方库代码的改动,另一方面也能将改动同步到团队每个成员。

根目录会多出patches目录记录第三方包内容的更改,随后我们在package.jsonscripts中增加如下内容:

json
npm i @milahu/patch-package -D

{
  "scripts": {
    // 省略其它 script
    "postinstall": "patch-package"
  }
}

这样一来,每次安装依赖的时候都会通过 postinstall 脚本自动应用 patches 的修改,解决了团队协作的问题。

注意

要改动的包在 package.json 中必须声明确定的版本,不能有 ~ 或者 ^ 的前缀。 在pnpm管理下,无法使用.

pnpm patch

  1. 先使用pnpm patch xxx@xxx命令,生成修改该包的一个临时路径,我们可以使用--edit-dir xxx来自定义路径。 会在node_modules/.pnpm_patches路径下生成改npm包
bash
pnpm patch lodash-es

# node_modules/.pnpm_patches/lodash-es@4.17.21
  1. 修改代码
  2. 提交代码
bash
 pnpm patch-commit '/Users/zhangweijie/2025/react-vite-demo/node_modules/.pnpm_patches/lodash-es@4.17.21'

修改后文件变更

仓库会有如下几个文件的变更 alt text

  1. pnpm-lock.yaml
yaml
patchedDependencies:
  lodash-es:
    hash: 7ff9a5473857cdaff39bab5711fe59dd7ba83a798e5a9e7686328fa14dcc076b
    path: patches/lodash-es.patch
  1. pnpm-workspace.yaml
yaml
patchedDependencies:
lodash-es: patches/lodash-es.patch
  1. patches/lodash-es.patch
diff --git a/add.js b/add.js
index b17f10771dbd75557caa00bd9705498d58f91686..efe432e2589860497da8d3893613a54980e9db4b 100644
--- a/add.js
+++ b/add.js
@@ -15,8 +15,8 @@ import createMathOperation from './_createMathOperation.js';
  * _.add(6, 4);
  * // => 10
  */
-var add = createMathOperation(function(augend, addend) {
-  return augend + addend;
+const add = createMathOperation(function(augend, addend) {
+  return augend + addend+ Math.random();
 }, 0);
 
 export default add;