使用 patch-package 優雅地修改第三方依賴庫

在前端開發中,有時我們需要對第三方依賴庫進行修改以滿足項目需求。然而,直接修改 node_modules 中的文件并不是一個好方法,因為每次重新安裝依賴時這些修改都會丟失。patch-package 是一個優秀的工具,可以幫助我們優雅地管理這些修改。

本文將介紹如何使用 patch-package 修改 element-plus 的代碼,并將修改保存為補丁文件。


初始化vue工程,安裝element-plus

npm create vue@latest
npm install element-plus --save
//省略:修改main.ts入口引入element-plus

修改app.vue

<template><main><!-- <TheWelcome /> --><el-button>默認的el-button顏色</el-button></main>
</template>

初始效果:在這里插入圖片描述

安裝 patch-package

首先,確保你的項目已經使用 npmyarn 初始化。然后安裝 patch-package

npm install patch-package --save-dev

或者使用 yarn

yarn add patch-package --dev

接著,在 package.jsonscripts 中添加以下命令:

"scripts": {"postinstall": "patch-package"
}

這樣,每次運行 npm installyarn install 時,patch-package 都會自動應用補丁。


修改 element-plus

假設我們需要修改 element-plus 中的某個組件行為。以下是具體步驟:

1. 找到需要修改的文件

node_modules/element-plus 中找到需要修改的文件。例如,我們需要修改 ElButton 組件的樣式文件 node_modules/element-plus/dist/index.css

2. 修改文件

直接編輯目標文件,完成你需要的修改。例如,將按鈕的默認背景顏色改為紅色:

/* 修改前 */
.el-button {color: var(--el-button-text-color);
}/* 修改后 */
.el-button {color: #ff0000;
}

注意我這里需改的是dist里的文件,如果你修改了lib下的component等內容,需要查詢打包element-plus才會生效

3. 生成補丁文件

修改完成后,運行以下命令生成補丁文件:

npx patch-package element-plus
  • npx 是用來臨時調用項目中安裝的 CLI 工具的命令,而 npm 是用來管理依賴的工具。

運行成功后,patch-package 會在項目根目錄下生成一個 patches 文件夾,其中包含 element-plus+<version>.patch 文件。


請添加圖片描述

驗證補丁

刪除 node_modules 并重新安裝依賴:

rm -rf node_modules
npm install
npm run dev

安裝完成后,patch-package 會自動應用補丁。檢查 node_modules/element-plus 中的文件,確認修改已生效。


頁面效果:
請添加圖片描述

再次修改補丁

如果需要對已經生成補丁的依賴庫進行進一步修改,可以按照以下步驟操作:

  1. 還原補丁:在修改前,確保當前補丁已應用到 node_modules 中。如果未應用,可以運行 npm installyarn install
  2. 修改文件:直接編輯 node_modules 中的目標文件,完成新的修改。
  3. 重新生成補丁:運行以下命令覆蓋原有補丁文件:
    npx patch-package element-plus
    
    這樣,新的補丁文件會替換舊的補丁文件。

替代方案

除了使用 patch-package,還有以下替代方案可以考慮:

  1. Fork 倉庫并發布到私有 npm 倉庫

    • Fork 第三方庫的代碼倉庫到自己的代碼倉庫。
    • 在 Fork 的倉庫中進行修改。
    • 將修改后的代碼發布到私有 npm 倉庫(如 Nexus、Verdaccio)。
    • 在項目中使用私有倉庫中的依賴。·
  2. 貢獻代碼到社區

    • 如果修改內容具有通用性,可以考慮向第三方庫的官方倉庫提交 Pull Request (PR)。
    • 通過社區審核后,修改會被合并到官方版本中,后續直接使用官方版本即可。

通過 patch-package 或其他替代方案,我們可以靈活地管理對第三方庫的修改,確保項目的穩定性和可維護性。希望本文對你有所幫助!

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

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

相關文章

馬科維茨均值—方差理論推導過程

下面給出一個詳細的、符號嚴謹、公式連貫的馬科維茨均值—方差理論推導過程&#xff0c;假設你輸入了 nnn 列股票的歷史收盤價數據。我們從數據符號的定義開始&#xff0c;逐步構建所有公式&#xff0c;并詳細解釋每個符號的意義。

僅靠prompt,Agent難以自救

Alexander的觀點很明確&#xff1a;未來 AI 智能體的發展方向還得是模型本身&#xff0c;而不是工作流&#xff08;Work Flow&#xff09;。還拿目前很火的 Manus 作為案例&#xff1a;他認為像 Manus 這樣基于「預先編排好的提示詞與工具路徑」構成的工作流智能體&#xff0c;…

【css酷炫效果】純CSS實現懸浮彈性按鈕

【css酷炫效果】純CSS實現懸浮彈性按鈕 緣創作背景html結構css樣式完整代碼效果圖 想直接拿走的老板&#xff0c;鏈接放在這里&#xff1a;https://download.csdn.net/download/u011561335/90492020 緣 創作隨緣&#xff0c;不定時更新。 創作背景 剛看到csdn出活動了&…

決策樹基礎

決策樹 定義 從根節點開始&#xff0c;也就是擁有全部的數據&#xff0c;找一個維度對根節點開始劃分&#xff0c; 劃分后希望數據整體的信息熵是最小的&#xff0c; 針對劃分出來的兩個節點&#xff0c;我們繼續重復剛才的劃分方式尋找信息熵最小的維度和閾值。 遞歸這個…

動態查找表

1.問題分析&#xff1a; 動態查找表是一種可以動態地插入、刪除和查找元素的數據結構。它是基于二叉搜索樹實現的&#xff0c;具有快速的查找和插入操作。 以下是一些關于動態查找表的問題分析&#xff1a; 1. 插入操作&#xff1a;在動態查找表中插入一個元素時&#xff0c…

得分匹配的朗之萬動力學——Score-Matching Langevin Dynamics (SMLD)

得分匹配的朗之萬動力學——Score-Matching Langevin Dynamics (SMLD) 文章目錄 得分匹配的朗之萬動力學——Score-Matching Langevin Dynamics (SMLD)摘要Abstract周報內容0. 上期補充1. 本期的基本思想2. 從一個分布中采樣&#xff08;Sampling from a Distribution&#xff…

字節DAPO算法:改進DeepSeek的GRPO算法-解鎖大規模LLM強化學習的新篇章(代碼實現)

DAPO算法&#xff1a;解鎖大規模LLM強化學習的新篇章 近年來&#xff0c;大規模語言模型&#xff08;LLM&#xff09;在推理任務上的表現令人矚目&#xff0c;尤其是在數學競賽&#xff08;如AIME&#xff09;和編程任務中&#xff0c;強化學習&#xff08;RL&#xff09;成為…

【Qt】QWidget的styleSheet屬性

&#x1f3e0;個人主頁&#xff1a;Yui_ &#x1f351;操作環境&#xff1a;Qt Creator &#x1f680;所屬專欄&#xff1a;Qt 文章目錄 前言1. styleSheet屬性2. 利用styleSheet屬性實現簡單的日夜模式切換2.1 知識補充-計算機中的顏色表示 3. 總結 前言 style?好像前端的st…

QT Quick(C++)跨平臺應用程序項目實戰教程 2 — 環境搭建和項目創建

目錄 引言 1. 安裝Qt開發環境 1.1 下載Qt安裝包 1.2 安裝Qt 1.3 安裝MSVC編譯器 2. 創建Qt Quick項目 2.1 創建新項目 2.2 項目結構 2.3 運行項目 3. 理解項目代碼 3.1 main.cpp文件 3.2 Main.qml文件 引言 在上一篇文章中&#xff0c;我們介紹了本教程的目標和結…

macOS Sequoia 15.3 一直彈出“xx正在訪問你的屏幕”

&#x1f645; 問題描述 macOS 系統升級后&#xff08;15.2或者15.3均出現過此問題&#xff09;&#xff0c;不管是截圖還是開騰訊會議&#xff0c;只要跟捕捉屏幕有關&#xff0c;都一直彈出這個選項&#xff0c;而且所有軟件我都允許訪問屏幕了&#xff0c;這個不是詢問是否…

二叉樹的學習

目錄 樹型結構&#xff08;了解&#xff09; 概念 概念&#xff08;重要&#xff09; 樹的表示形式&#xff08;了解&#xff09; 樹的應用 二叉樹&#xff08;重點&#xff09; 概念 兩種特殊的二叉樹 二叉樹的性質 利用性質做題&#xff08;關鍵&#xff09; 二叉…

AbMole新生大鼠腦類器官培養Protocol

近日&#xff0c;希臘亞里士多德大學塞薩洛尼基分校的研究團隊在《神經科學方法》&#xff08;Journal of Neuroscience Methods&#xff09;期刊上發表了一項引人注目的研究&#xff0c;他們開發了一種基于新生大鼠腦組織的新型類器官培養協議&#xff0c;并展望其在阿爾茨海默…

物理環境與安全

物理安全的重要性 信息系統安全戰略的一個重要組成部分物理安全面臨問題 環境風險不確定性人類活動的不可預知性 典型的物理安全問題 自然災害環境因素設備安全、介質安全、傳輸安全 場地選擇 區域&#xff1a;避開自然災害高發區環境&#xff1a;原理可能的危險因素抗震&…

手動離線安裝NextCloud插件

1、下載離線插件安裝包 進入NextCloud官方插件商城&#xff1a;https://apps.nextcloud.com/ 選擇自己需要的插件軟件 選擇NextCloud對應版本的插件安裝包 2、解壓安裝 進入的到NextCloud安裝目錄的apps目錄 cd /var/www/html/apps 將下載的xxx.tar.gz復制到apps目錄中解…

算力100問?第93問:算力資源為何更分散了?

目錄 1、政策驅動與地方投資的盲目性 2、美國芯片斷供與國產替代的陣痛 3、政企市場對私有云的偏好 4、技術標準與供需結構的失衡 5、產業生態與市場機制的滯后 6、破局路徑與未來展望 在大模型和人工智能技術快速發展的背景下,算力資源已成為數字經濟時代的核心基礎設施…

基于HTML的郵件發送狀態查詢界面設計示例

以下是一個基于HTML的郵件發送狀態查詢界面設計示例&#xff0c;結合篩選功能、狀態展示和重新發送操作&#xff0c;采用Bootstrap框架實現響應式布局&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"&…

分治-快速排序系列一>快速排序

目錄 題目方法&#xff1a;優化方法&#xff1a;代碼&#xff1a; 題目方法&#xff1a; 忘記快速排序看這里&#xff1a;鏈接: link 優化方法&#xff1a; 代碼&#xff1a; public int[] sortArray(int[] nums) {qsort(nums,0,nums.length-1);return nums;}private void qso…

《AI大模型趣味實戰 》第7集:多端適配 個人新聞頭條 基于大模型和RSS聚合打造個人新聞電臺(Flask WEB版) 1

AI大模型趣味實戰 第7集&#xff1a;多端適配 個人新聞頭條 基于大模型和RSS聚合打造個人新聞電臺(Flask WEB版) 1 摘要 在信息爆炸的時代&#xff0c;如何高效獲取和篩選感興趣的新聞內容成為一個現實問題。本文將帶領讀者通過Python和Flask框架&#xff0c;結合大模型的強大…

微服務 - 中級篇

微服務 - 中級篇 一、微服務架構深化&#xff08;一&#xff09;服務拆分原則&#xff08;二&#xff09;服務通信方式 二、微服務技術選型&#xff08;一&#xff09;開發框架&#xff08;二&#xff09;容器技術 三、微服務實踐與優化&#xff08;后續會詳細分析&#xff09;…

STM32__紅外避障模塊的使用

目錄 一、紅外避障模塊 概述 二、直接讀取OUT引腳電平 三、使用中斷方式觸發 一、紅外避障模塊 概述 引腳解釋&#xff1a; VCC接3.3V 或 5.0VGND接開發板的GNDOUT數字量輸出(0或1&#xff09;; 低電平時表示前方有障礙 ; 通過可調電阻調整檢測距離 產品特點&#xff1a; …