需求場景
在Element Plus的el-table組件二次開發中,需新增列顯示/隱藏控件功能。直接修改node_modules源碼存在兩大痛點:
-
團隊協作時修改無法同步
-
依賴更新導致自定義代碼丟失
解決方案選型
通過patch-package工具實現:
-
📦 非侵入式修改第三方依賴
-
? 自動生成補丁文件(.patch)
-
🔄 依賴重裝時自動應用修改
大致的流程也比較簡單:通過命令拷貝一份依賴庫的文件項目,然后用戶對該拷貝的項目進行修改,然后通過提供的命令對修改后的代碼以及原來的代碼進行diff,生成一個
xxx.patch
的文件,對應項目的package.json
會有個pnpm.patchedDependencies
字段來指向patch
文件,之前其他人安裝依賴后,會自動使用到該patch
PS!!!: 確保你的
pnpm>=v7.11.0
demo版本
一、新建demo文件夾
mkdir patch-democd patch-demopnpm init
完成后得到這樣結果
二、安裝依賴
pnpm i normal-tags
完成后得到這樣結果
三、接下來,我們對該庫進行自己的一些修改
- 首先,執行如下指令:生成一個normal-tags的臨時文件夾:
# 注意這里要指定對應的版本
pnpm patch normal-tags@0.0.3You can now edit the following folder: E:\demo\patch-demo\node_modules\.pnpm_patches\normal-tags@0.0.3
-
然后我們打開生成的這個鏈接
E:\demo\patch-demo\node_modules\.pnpm_patches\normal-tags@0.0.3
,在里面修改normal-tags
的代碼normal-tags
的代碼很簡單,假設我們要在改方法加上一行打印
-
修改完成保存后,執行如下指令:
pnpm patch-commit E:\demo\patch-demo\node_modules\.pnpm_patches\normal-tags@0.0.3
-
然后可以看到項目中生成了一個patches/normal-tags@0.0.3.patch的文件,同時在package.json中也增加了如下配置:
-
然后這就搞定了!查看node_modeles下的is-odd代碼,該修改已經加上了,后續別人拿到該項目,重新pnpm i也能得到修改后的代碼
源碼鏈接
點擊-----github源碼倉庫 or gitee源碼倉庫
注意
如果使用window并且使用git-bash
的話,文件路徑要使用兩個\\
分割, 如:
pnpm patch-commit E:\demo\patch-demo\node_modules\.pnpm_patches\normal-tags@0.0.3
tips:
歡迎大家進群交流cursor踩坑日記