使用 patch-package 优雅地修改第三方依赖库

CMake打包实战:解决‘动态库找不到’的经典问题,让你的程序在别人电脑上也能跑 本文深入探讨了CMake打包过程中常见的'动态库找不到'问题,提供了从RPATH配置到多平台兼容性处理的完整解决方案。通过实战案例和最佳实践,帮助开发者确保可执行程序在不同环境下都能正确加载动态依赖库,实现无缝部署。 阅读详情

在前端开发中,有时我们需要对第三方依赖库进行修改以满足项目需求。然而,直接修改 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

首先,确保你的项目已经使用 npm 或 yarn 初始化。然后安装 patch-package:

npm install patch-package --save-dev

或者使用 yarn:

yarn add patch-package --dev

接着,在 package.json 的 scripts 中添加以下命令:

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

这样,每次运行 npm install 或 yarn 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 install 或 yarn 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 或其他替代方案,我们可以灵活地管理对第三方库的修改,确保项目的稳定性和可维护性。希望本文对你有所帮助!

UE5项目在Arm64 Linux服务器上的打包部署实战与实验性插件适配 在游戏开发与实时渲染领域,将大型C++项目部署到非x86架构平台是一项常见的技术挑战,尤其是在国产化服务器和边缘计算场景下。其核心原理在于处理不同指令集(如AArch64与x86_64)和操作系统API(如Linux/POSIX与Win32)之间的兼容性问题,这直接关系到程序的编译、链接与运行时行为。从技术价值看,实现Arm64平台的适配不仅能拓展应用场景至鲲鹏、飞腾等国产服务器及树莓派等嵌入式设备,还能降低长期硬件成本与功耗。典型的应用场景包括云游戏服务器、数字孪生边缘渲染节点及国产化环境下的仿真训练平台 阅读详情

相关推荐

Ubuntu 18.04 手动部署 Postfix 邮件服务器实战指南

Postfix 是 Linux 系统中核心的邮件传输代理(MTA),负责可靠、安全地转发和投递电子邮件。其工作原理基于 SMTP 协议分层处理:接收→队列→路由→加密传输→认证中继。技术价值体现在高并发承载能力、细粒度权限控制与完整审计日志支持,广泛应用于运维告警、CI/CD 通知、IoT 设备心跳等轻量级自动化场景。尤其在 Ubuntu 18.04 等进入 ESM 阶段的长期支持系统中,官方 apt 包存在 TLS 兼容性差、配置僵化、权限模型缺陷等问题,必须通过源码编译+deb 打包方式实现可控升级与生

weixin_33816821的博客 451

【patch-package】修改node_modules下的依赖包源码

这是npm官网上对patch-package的说明,其意思就是可以让大家立即对npm依赖的源码进行自定义修改。其实大多数时候是不需要自己去改依赖源码的,毕竟大多数情况你写的代码肯定没别人作者自己写得好,但是遇到bug了,自己去及时改还是可以的

qq_39404437的博客 4988

昆仑通态屏幕制作(连载1)---接触篇

写在开始 背景:最近出了做QT、LORA和4G,还做了一个屏幕。以前做了一个迪文的串口屏幕,发现网上的教程很多,所以连载就不更新了,并且迪文屏幕的设置什么的比较简单,应该从网上都能找到对应的教程。而现在用的昆仑通态的屏幕属于嵌入式屏幕,至于为啥叫嵌入式,也不是很明白,反正就是需要用这个屏幕,嵌入式不嵌入式不重要了。重要的是能用,并且能实现串口屏幕不能实现的功能。所以选定昆仑通态的一款屏幕。 文章语言:我比较习惯用比较糙的语言介绍做的东西,有时候不太准备,但是为了方便理解,还请大家谅解。用...

weixin_45426095的博客 6735

Nodejs的patch-package是什么,作用是什么,怎么实现的,优势是什么,劣势是什么

大白话系列之:去除patch-package的神秘面纱!

weixin_48634509的博客 2004

企业级智能问数开发的核心痛点与技术聚焦

本文介绍了企业级智能问数系统开发的三大核心问题和解决方案:语义解析不精准、SQL生成不健壮、企业适配难落地。文章从开发者视角出发,详细拆解了NLU语义解析、SQL生成、对话记忆、企业级适配四大核心模块的技术实现。 在技术选型方面,推荐了LangChain+DeepSeek-R1、FAISS/Milvus、SQLAlchemy等工具链组合。针对企业级需求,重点讲解了: 语义解析模块的意图识别优化和要素提取技术 SQL生成模块的语法校验与性能优化方案 对话记忆模块的Redis存储实现 企业级适配的三层防护体系和

lamehsl的专栏 1046

MPC-CBF 控制原理详解

假设系统满足如下离散时间动力学模型xt1fxtutxt∈Xut∈Uxt1​fxt​ut​xt​∈Xut​∈Uxtx_txt​:状态变量,定义域为可行状态集X⊆RnX⊆Rnutu_tut​:控制输入,定义域为控制约束集U⊆RmU⊆Rm系统需满足安全约束,由如下控制障碍函数(CBF)hX→RhX→RCx∈X∣hx≥0C:=x∈X∣hx≥。

m0_54691290的博客 1179

Patch-Package:一款灵活的开源依赖修复工具

它让我们能够在不破坏原有开发流程的前提下进行灵活的修改,是开源项目和团队协作中的得力助手。通过掌握 Patch-Package 的使用方法和最佳实践,你可以大大提高项目的开发效率,避免依赖管理带来的困扰。(原因是笔者对select的组件进行了二次封装,某些value的变化是在下一个 run loop发生的,而element-plus中的表单检查是线性触发的)开发者可以将开源库的源码 Fork 到自己的代码仓库中,然后在 Fork 后的仓库中进行修改和维护。开源库可能存在 Bug 或者与项目不兼容的问题。

datacreating的博客 1719

Apk脱壳圣战之---脱掉“梆梆加固”的保护壳

一、前言 现如今Android用户的安全意识不是很强,又有一些恶意开发者利用应用的名字吸引眼球,包装一个恶意锁机收费的应用,在用户被骗的安装应用之后,立马手机锁机,需要付费方可解锁。这样的恶意软件是非常让人痛恨的。所以本文就用一个案例来分析如何破解这类应用,获取解锁密码,让被骗的用户可以找回爽快! 二、分析软件锁机原理 本文用的是一款叫做:安卓性能激活.apk,关于样本apk文件后面会...

尼古拉斯.赵四的博客 5060

patch-package给依赖打补丁实例详解

先修改依赖文件,然后运行patch-package来创建patch文件了。我这里用element-ui来举例子。patch是锁定版本号的,如果升级了版本,patch内容将会失效。可以在package.json锁定版本号。此时,系统会自动创建一个文件夹,如下图所示。如果提示如下,则表示不支持该包管理器。官方只支持 npm 和 yarn。官方只支持 npm 和 yarn。注意:不要使用cnpm。...

银鞍照白马的博客 4196

STM32 HAL库状态机实现按键多事件检测(无阻塞高效处理)

本文详细介绍基于STM32 HAL库的状态机实现按键多事件检测方法,包括单击、双击等高效无阻塞处理。通过定时器中断和GPIO中断优化,结合状态机设计,显著提升系统响应效率和实时性,适用于嵌入式系统开发。

tech5的博客 1016

用RFSoC ZU47DR搭建软件无线电原型:从零配置Vivado到生成第一个射频信号

本文详细介绍了如何使用Xilinx RFSoC ZU47DR开发板搭建软件无线电原型系统,从Vivado环境配置到生成首个射频信号的全流程。通过整合ARM处理器、FPGA逻辑和高速ADC/DAC,该平台为通信算法验证提供了高效解决方案,特别适合SDR开发者和通信工程师快速实现原型设计。

weixin_26763955的博客 589

手把手教你使用patch-package给npm包打补丁

属性限制不符合预期,当输入中文字符时,该属性会将与中文对应的预输入拼音字数一同限制,导致汉字输入长度受阻。事情往往不是预期的那么顺利,本以为一波愉快升级已经完美的解决了问题,不料好景不长一周后小A同学发来问候:“我发现antd。为了避免 v4.15.3 版本之前的其他组件存在未知bug,本次补丁我们基于 4.15.3 版本给 upload 组件打补丁。遇到这种问题和大多数人一样,我首先想到的就是升级antd到最新版本,于是二话不说一顿操作,升级完后果然问题迎刃而解~组件存在一个bug,该bug表现为。

砖业二十年 6270

新手也能搞定!用ADS 2023从零设计一个超宽带Wilkinson功分器(附完整版图)

本文详细介绍了如何使用ADS 2023从零开始设计超宽带Wilkinson功分器,涵盖介质板参数设置、微带线计算优化、版图生成验证等关键步骤。通过实例演示和常见问题排查,帮助射频工程新手快速掌握功分器设计技巧,提升设计效率。

weixin_42692935的博客 476

源码补丁神器—patch-package

这令人沮丧,因为已经编写了许多特定于此依赖项的代码,如果替换依赖库,这些代码很可能会被浪费。安装成功后查看之前修改的 node_modules 依赖包中的文件,查看修改的代码是否依然存在,如果之前修改代码依然存在即表明补丁文件已经生效,如果你之前修改的代码不存在即表明补丁文件没有生效。后几种方法都比较复杂,并且会导致项目臃肿,更容易忘记自己修改了源码的哪个部分,而且更新麻烦,每次都需要手动去更新代码,无法与插件同步更新。问题已定位到,要修改显示电子签章的代码是在node_modules的依赖包中。

京东科技开发者 516

车辆网络安全ISO/SAE 21434解读(一)概述

ISO/SAE 21434 《道路车辆 网络安全工程》是SAE和ISO共同制定的一项针对道路车辆的网络安全标准,它是一个面向汽车行业全供应链(OEM及各级供应商)的车辆网络安全管理指导文件

xiaoxiabang的博客 8422

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

copy 修改时间_如何优雅的修改node_modules中的依赖库

自己团队(腾讯/看点/搜索)长期招聘web前端、c++后台、搜索/推荐算法,欢迎来撩,lucaspei@tencent.com。--------------------------------------------------------------------- 最近使用了公司内的一个开源项目,由于业务需要(不适合提MR的业务修改),需要简单的修改 @tencent/wuji-s...

weixin_33816685的博客 272

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python猴子补丁:运行时动态修改代码的实战指南

在Python开发中,动态修改代码行为是一项高级技术,它允许开发者在运行时调整程序逻辑,而无需直接修改源代码。这项技术的核心原理基于Python的动态对象模型和命名空间机制,通过改变模块或类中属性的引用来实现功能替换或扩展。从技术价值来看,动态修改能力为紧急问题修复、无侵入式监控、单元测试模拟以及插件化架构提供了灵活解决方案。特别是在处理第三方库的紧急Bug、为现有系统添加调试逻辑、以及在测试中隔离外部依赖等应用场景中,这种技术展现出显著优势。本文聚焦于Python中的‘猴子补丁’技术,深入探讨其如何通过修

weixin_34150830的博客 362

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++项目源码集成第三方库:CMake FetchContent实战指南

在C++项目开发中,依赖管理是构建系统的核心环节。传统方式如预编译二进制库常面临ABI不兼容、跨平台适配等挑战,而源码级集成通过将第三方库的构建流程内化到项目构建体系中,从根本上解决了环境一致性问题。其技术价值在于实现构建过程的可重复性、编译选项的精确控制以及依赖版本的严格锁定,尤其适用于跨平台开发、性能优化和深度定制场景。现代CMake提供的FetchContent模块,以声明式方式实现了构建时自动下载与编译,成为管理spdlog等流行库的首选方案。通过合理配置,开发者能高效处理传递依赖、构建选项定制及离

weixin_34192816的博客 317

Maven项目构建入门:从环境配置到依赖管理

Maven作为Java项目构建的事实标准工具,通过pom.xml文件实现依赖管理和构建流程标准化。其核心原理是基于中央仓库机制和声明式依赖配置,解决了传统Java开发中手动管理jar包的痛点。在工程实践中,Maven通过生命周期阶段(compile/test/package等)自动执行构建任务,配合阿里云镜像等优化配置可显著提升构建效率。典型应用场景包括单模块项目构建、多模块项目管理,以及与Jenkins等CI工具的集成。针对依赖冲突等常见问题,可通过dependency:tree分析依赖关系,使用excl

weixin_30652491的博客 594

Gemma.cpp依赖管理实战指南:5个关键技巧解决复杂依赖问题

在构建高性能的**Gemma.cpp**推理引擎时,**依赖管理**和**版本控制**往往是开发者面临的最大挑战。作为Google Gemma模型的轻量级C++推理实现,Gemma.cpp通过双构建系统策略实现了高效的**第三方库集成**,但如何在实际开发中避免依赖冲突、确保构建稳定性?本文将分享5个关键技巧,帮助开发者掌握Gemma.cpp的依赖管理精髓。 ## 为什么Gemma.cpp的依赖

gitblog_00373的博客 481

C++ RESTful API开发实战:从原理到实现,使用C++ REST SDK构建高效网络服务

RESTful API作为一种基于HTTP协议的架构风格,是现代网络服务交互的通用标准。其核心原理遵循客户端-服务器分离、无状态、统一接口等约束,通过HTTP方法(GET、POST、PUT、DELETE)与资源URI的精准映射,实现对资源的增删改查操作。这种设计赋予了API良好的可伸缩性、简单性和互操作性,使其成为微服务、前后端分离及系统集成中的关键技术。在C++工程实践中,借助现代库如C++ REST SDK,开发者可以高效处理HTTP请求、JSON序列化等任务,将底层性能优势与标准的网络服务接口相结合,

weixin_30615767的博客 499

解决Vue2项目Node.js 17+报错:OpenSSL 3.0与webpack 4的兼容性问题

在前端工程化领域,构建工具与运行环境的版本兼容性是开发者常遇到的挑战。哈希算法作为构建过程中生成文件摘要的核心技术,其安全性演进直接影响工具链的稳定性。随着Node.js升级至v17+版本,其底层加密库OpenSSL 3.0出于安全考虑,默认禁用了MD4等老旧算法,而广泛使用的webpack 4仍依赖该算法进行文件哈希计算,导致构建时抛出“digital envelope routines::unsupported”错误。这一兼容性问题凸显了技术栈迭代中历史包袱与新安全规范的冲突。针对Vue 2等基于web

weixin_33798152的博客 347
上一篇: 微前端框架深度对比与技术实现剖析
下一篇: 深入解析大文件切片上传:Vue3 实现全流程指南
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值