利用pnpm patch命令實現依賴包熱更新:精準打補丁指南

需求場景

在Element Plus的el-table組件二次開發中,需新增列顯示/隱藏控件功能。直接修改node_modules源碼存在兩大痛點:

  1. 團隊協作時修改無法同步

  2. 依賴更新導致自定義代碼丟失

解決方案選型

通過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

完成后得到這樣結果
在這里插入圖片描述

三、接下來,我們對該庫進行自己的一些修改

  1. 首先,執行如下指令:生成一個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

在這里插入圖片描述
在這里插入圖片描述

  1. 然后我們打開生成的這個鏈接
    E:\demo\patch-demo\node_modules\.pnpm_patches\normal-tags@0.0.3,在里面修改normal-tags的代碼

    normal-tags的代碼很簡單,假設我們要在改方法加上一行打印
    在這里插入圖片描述

  2. 修改完成保存后,執行如下指令:

    pnpm patch-commit E:\demo\patch-demo\node_modules\.pnpm_patches\normal-tags@0.0.3
    

    在這里插入圖片描述

  3. 然后可以看到項目中生成了一個patches/normal-tags@0.0.3.patch的文件,同時在package.json中也增加了如下配置:

    在這里插入圖片描述
    在這里插入圖片描述

  4. 然后這就搞定了!查看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踩坑日記
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/79187.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79187.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79187.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ThinkPad T520 無法讀到硬盤 問題排查思路

錯誤提示:2100:detection error on hdd0(Main hdd) 1、判斷錯誤提示含義 表示電腦在啟動時無法檢測到主硬盤(HDD0)。 2、 常見原因: 硬盤松動或接觸不良 → 特別是筆記本在移動或震動后,硬盤排線松了。 硬盤損壞 →…

Doris部署生產集群最低要求的部署方案

Doris生產集群最低部署方案(2025年4月版) 一、節點規劃與數量 1. FE節點(Frontend) 數量:至少 3個節點(1個Follower 2個 Observer),確保高可用(HA)。角色分…

游戲引擎學習第227天

今天的計劃 今天的工作重點是進行吸引模式(attract mode)的開發,主要是處理游戲的進出和其他一些小的細節問題,這些是之前想要整理和清理的部分。我做了一些工作,將游戲代碼中的不同部分分離到邏輯上獨立的區域&#…

spark-SQL數據加載和保存

數據加載與保存 通用方式: 通過 spark.read.load 和 df.write.save 實現數據加載與保存。可利用 format 指定數據格式,如 csv 、 jdbc 等; option 用于設置特定參數,像 jdbc 格式下的數據庫連接信息; load 和 save 則…

算法升級戰報:亞馬遜受眾定向工具實測點擊成本降37%

隨著廣告成本居高不下,精準投放成為賣家們繞不開的焦慮點。而最近一輪亞馬遜DSP廣告系統的算法升級,似乎正在給這場投放內卷帶來新的轉機。在這篇文章中,我們將基于實際測試數據,詳細解析亞馬遜受眾定向工具的表現,并復…

大帶寬服務器的優勢

大帶寬服務器最大的優勢就在于可以顯著提高數據傳輸的速度,這對于有著高流量應用和實時數據交換需求的企業來說,大帶寬服務器中的帶寬越大,所提供的數據傳輸速度就越快,同時網絡的延遲度也會變低,所以大帶寬服務器往往…

華為OD機試真題——阿里巴巴找黃金寶箱 IV(2025A卷:200分)Java/python/JavaScript/C++/C語言/GO六種最佳實現

2025 A卷 200分 題型 本文涵蓋詳細的問題分析、解題思路、代碼實現、代碼詳解、測試用例以及綜合分析; 并提供Java、python、JavaScript、C、C語言、GO六種語言的最佳實現方式! 華為OD機試真題《阿里巴巴找黃金寶箱 IV》: 目錄 題目名稱&…

C++零基礎實踐教程

模塊一:準備工作與第一個程序 (熱身) 在正式編寫代碼之前,我們需要了解為什么要學習 C,并搭建好我們的開發環境。然后,我們將編寫并運行第一個簡單的 C 程序。 1. 為什么選擇 C? 你可能聽說過很多編程語言&#xff…

6 CMD 與 PowerShell 指令大全、C 程序終端運行、字符編碼切換指南

1 CMD 與 PowerShell 常用指令 在命令行環境中高效運行程序,掌握終端的基本操作命令至關重要。無論是 Windows 系統下的 CMD(命令提示符)還是 PowerShell,它們都配備了一系列實用的命令,助力我們管理文件、執行程序以及…

Linux——共享內存

目錄 一、共享內存概念 二、共享內存的一些函數 2.1 shmget 創建共享內存 2.2 shmat 訪問共享內存 2.3 shmdt 解除共享內存的映射 2.4 shnctl 刪除共享內存段 三、共享內存 3.1 創建測試進程 3.2 使用循環測試 ?編輯 3.3 共享內存寫入程序 3.4 帶有信號量的共享內…

數啟新疆,智領未來!2025新疆數字經濟發展戰略研討會在烏市啟幕

2025年4月20日,由新疆維吾爾自治區數字經濟聯合會主辦、中鈞科技有限公司承辦的"2025新疆數字經濟發展戰略研討會"將在烏魯木齊水磨溝區金正大廈三層會議中心隆重召開。 作為本年度新疆數字經濟領域規格最高的行業盛會,會議將匯聚自治區14個廳…

Nginx:輕量級高性能的Web服務器與反向代理服務器

目錄 一.引言 二.Nginx的核心特點 2.1高性能與高并發 2.2低資源消耗 2.3功能豐富 2.4高度擴展性 三.Nginx的應用場景 3.1靜態資源服務器 3.2反向代理服務器 3.3API網關 3.4Nginx的配置與使用 四.總結 一.引言 在互聯網高速發展的今天,Web服務器的性能與…

嵌入式Linux設備使用Go語言快速構建Web服務,實現設備參數配置管理方案探究

本文探討,利用Go語言及gin框架在嵌入式Linux設備上高效搭建Web服務器,以實現設備參數的網頁配置。通過gin框架,我們可以在幾分鐘內創建一個功能完善的管理界面,方便對諸如集中器,集線器等沒有界面的嵌入式設備的管理。…

KALI搭建log4j2靶場及漏洞復現全流程

這里使用了兩臺KALI虛擬機,一臺用于安裝靶場環境,一臺用于攻擊 一、Docker的安裝(靶機) 1、Linux內核版本查看 #安裝docker要求內核版本kerner>3.10 #為此,先檢查當前Linux系統的內核版本 uname -a 2、Linux apt…

學習筆記—C++—模板初階

目錄 模板初階 泛型編程 函數模板 模版概念 函數模版格式 模版的原理 函數模板的實例化 模版參數的匹配規則 類模板 模板初階 泛型編程 使用函數重載雖然可以實現,但是有一下幾個不好的地方: 1. 重載的函數僅僅是類型不同,代碼復…

Docker 中多個容器之間的通信

在 Docker 中,多個容器之間的通信可以通過以下幾種主要方式實現,具體選擇取決于網絡需求、隔離性及管理復雜度: 一、自定義 Bridge 網絡(推薦) 通過創建自定義的 Docker 網絡,容器可以加入同一網絡并通過容…

Day1-初次接觸UFS

經過導師初次介紹,了解工作以芯片測試為主,需堅持學習,小白大致需3-6月入門。整體學習應分為3大塊,UFS協議占40%(3-4h),C技能占40%(3-4h),工具或業務占20%(1-2h&#xff…

【LeetCode 熱題100】二叉樹構造題精講:前序 + 中序建樹 有序數組構造 BST(力扣105 / 108)(Go語言版)

🌱 二叉樹構造題精講:前序 中序建樹 & 有序數組構造 BST 本文圍繞二叉樹的兩類構造類題目展開解析: 從前序與中序遍歷序列構造二叉樹 將有序數組轉換為二叉搜索樹 我們將從「已知遍歷構造樹」和「平衡構造 BST」兩個角度,拆…

JMeter重要的是什么

重要特性 支持多種協議: JMeter支持對多種協議進行性能測試,包括HTTP、HTTPS、FTP、JDBC(數據庫)、LDAP、JMS、SOAP、REST等。這使得它能夠適應各種不同的測試場景。強大的負載模擬能力: JMeter能夠模擬大量的虛擬用戶…

一文讀懂WPF系列之MVVM

WPF MVVM 什么是MVVMWPF為何使用MVVM機制WPFMVVM 的實現手段 INotifyPropertyChanged?數據綁定的源端通知??原理 PropertyChanged事件雙向綁定的完整條件常見疑惑問題 什么是MVVM 翻譯全稱就是 model-view-viewmodel 3部分內容 以wpf的概念角度來解釋就是 數據庫數據源模型…