【问题解决】使用patch-package修改node-models中的源码

文章目录

  • 一、应用场景
  • 二、patch-package 和 postinstall
    • patch-package
    • postinstall
  • 三、操作步骤
    • 1、使用yarn安装patch-package和postinstall-postinstall
    • 2、修改package.json
    • 3、修改node-model中源码、保存。
    • 4、找到修改文件对应的包名
    • 5、使用git将新增的patches文件同步到仓库
    • 6、新环境拉下仓库,验证修改是否成功。
  • 四、通过git维护自定义依赖库
    • 修改方式

一、应用场景

最近在进行开源平台的二开工作,有一些功能不可避免的需要改动一些依赖包的源码,会修改node_models中的代码。

在开发环境中,我们可以直接通过yarn gulp -> yarn start进行编译测试,但是如果我想将代码同步到仓库时候则遇到了问题:一般不会将node_models文件进行同步,则别人拉下来的代码依然是未修改的版本。

那么如何解决这个问题呢?

二、patch-package 和 postinstall

patch-package

patch-package 是一个用于修改第三方依赖包的工具,主要用途包括:

  • 临时修复依赖包中的bug:当第三方库有bug但未及时修复时,可以直接修改源码
  • 定制化需求:对依赖包进行个性化修改以满足特定需求
  • 紧急修复:在等待官方修复期间,使用本地补丁解决问题

使用流程

  1. 安装 patch-package 到开发依赖
  2. 直接修改 node_modules 中的依赖包代码
  3. 生成补丁文件
  4. 提交补丁文件到版本控制系统

postinstall

postinstall 是 npm/yarn 的生命周期钩子脚本之一:

  • 自动执行:在执行 npm installyarn install 后自动运行
  • 定义位置:在 package.jsonscripts 字段中定义
  • 常见用途
    • 应用补丁(如使用 patch-package)
    • 构建原生模块
    • 初始化项目配置
    • 执行必要的设置脚本

三、操作步骤

1、使用yarn安装patch-package和postinstall-postinstall

命令行:

yarn add patch-package postinstall-postinstall

报错解决:
在这里插入图片描述

对于工程需要明确:将依赖项添加到根还是添加到特定的工作区包:

若:将依赖项添加到根 workspace,执行:

yarn add <package-name> -W
# 或者
yarn add <package-name> --ignore-workspace-root-check

若:将依赖项添加到特定的工作区包,执行:

yarn workspace <workspace-name> add <package-name>

所以以上代码替换为:

yarn add patch-package postinstall-postinstall -W

在这里插入图片描述

2、修改package.json

// package.json
"scripts": {"postinstall": "patch-package",
}

postinstall 是 npm 或 yarn 安装依赖后自动执行的脚本,通常用于执行后续配置或修补操作。这里将其指向patch-package

3、修改node-model中源码、保存。

4、找到修改文件对应的包名

执行以下代码:

yarn patch-package 你的包名# 以protomaps为例
yarn patch-package protomaps

在这里插入图片描述

然后会在根目录下出现:

在这里插入图片描述

5、使用git将新增的patches文件同步到仓库

(新安装包后,yarn.lock也会修改,因此同步提交)

在这里插入图片描述

6、新环境拉下仓库,验证修改是否成功。

在这里插入图片描述

执行yarn install的时候会自动执行patch-package,自动替换源码补丁。修改成功

四、通过git维护自定义依赖库

若需要二开大量修改源码的时候,还可以单独维护一个自定义依赖库。这样拉取代码的时候可以自动获取你修改后的依赖版本。

修改方式

在package.json中,找到devDependencies下对应的包名,将原先的版本号,替换为git+仓库路径:

例如,以terriajs包为例:

"devDependencies": {
"terriajs": "git+http://github.com/yourGitRepository/terriajs.git",
}

然后再次在终端输入以下命令,安装依赖并启动项目,偶尔会碰到github被墙的问题(也可以使用gitea/gitlab)

yarn install 
yarn gulp
yarn start

这样拉下来的就是更新后的版本了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92734.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92734.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当配置项只支持传入数字,即无法指定单位为rem,需要rem转px

您好&#xff01;针对您 Vue 3 Element Plus 的技术栈&#xff0c;要优雅且符合大厂规范地解决这个问题&#xff0c;最佳实践是创建一个响应式的 Composition API (组合式函数)。 这个方法完全遵循 Vue 3 的设计哲学&#xff0c;具有高内聚、低耦合、可复用、类型安全&#xf…

谷歌搜索 sg_ss 逆向分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;部分python代码sg_ss cp.call(get_sg_…

一个“加锁无效“的诡异现象

加锁了还出问题&#xff1f;从"点击过快"到"状态可控"&#xff1a;多线程共享变量的并发陷阱与实战对策详情如下&#xff1a;在服务端开发中&#xff0c;多线程并发处理客户端请求是提升系统吞吐量的常见手段。最近有位开发者朋友遇到了一个令人费解的问题…

液体泄漏识别误报率↓76%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心技术参数与架构设计引用自《陌讯技术白皮书》&#xff0c;禁止未经授权的转载与篡改。一、行业痛点&#xff1a;液体泄漏识别的现实挑战在化工生产、食品加工、仓储物流等场景中&#xff0c;液体泄漏的实时监测是保障安全生产的关键…

Y9000P跑开源模型(未完成)

环境信息 1、Y9000笔记本 2、1T空白硬盘 3、ubunut24.04桌面版 一、环境初始化 第一部分&#xff1a;系统初始化 1、安装基础软件 apt-get update apt-get -y install openssh-server openssh-client apt-utils freeipmi ipmitool sshpass ethtool zip unzip nano less git ne…

ARM体系结构

ARM体系结构 编程原理 从源代码到CPU执行过程 #mermaid-svg-M4xemCxDjIQVNNnW {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:14px;fill:#333;}#mermaid-svg-M4xemCxDjIQVNNnW .error-icon{fill:hsl(220.5882352941, 100%, 98.3333333333%);}#mer…

基于SpringBoot的高校社团管理系统的设计与实现(代码+LW文档+远程运行)

&#x1f4af;博主&#xff1a;✌全网拥有50W粉丝、博客专家、全栈领域优质创作者、平台优质Java创作者、专注于Java技术领域和毕业项目实战✌&#x1f4af; &#x1f497;开发技术&#xff1a;SpringBoot、Vue、SSM、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、…

F5发布业界首创集成式应用交付与安全平台,开启ADC 3.0新时代

在数字化转型加速与AI技术蓬勃发展的今天&#xff0c;企业对应用性能与安全的需求正经历革命性变革。传统应用架构已难以满足现代混合多云环境与AI驱动型业务场景的严苛要求。全球领先的应用安全和交付服务提供商F5&#xff08;NASDAQ: FFIV&#xff09;&#xff0c;持续推动 F…

SELinux 入门指南

SELinux(Security-Enhanced Linux)是 Linux 内核的一个安全模块&#xff0c;它提供了一种强制访问控制&#xff08;Mandatory Access Control, MAC&#xff09;机制。与传统的 Linux 自主访问控制&#xff08;Discretionary Access Control, DAC&#xff09;不同&#xff0c;SE…

ARMv8 MMU页表格式及地址转换过程分析

1.简介 CPU发出的虚拟地址经过MMU转换后得到物理地址&#xff0c;然后使用物理地址访问真实的硬件。虚拟地址和物理地址的映射关系保存在页表中&#xff0c;MMU需要遍历页表&#xff0c;才能将虚拟地址转换成物理地址。ARM64现在有两种大小的页表描述符&#xff0c;分别是ARMv8…

数据结构---二叉树(概念、特点、分类、特性、读取顺序、例题)、gdb调试指令、时间复杂度(概念、大O符号法、分类)

一、二叉树1、树1&#xff09;概念 树是 n(n > 0) 个结点的有限集合。若 n0 &#xff0c;为空树。在任意一个非空树中&#xff1a;&#xff08;1&#xff09;有且仅有一个特定的根结点&#xff1b;&#xff08;2&#xff09;当 n>1 时&#xff0c;其余结点可分为 …

安全基础DAY1-安全概述

信息安全现状及挑战常见术语信息安全的脆弱性及常见攻击网络环境的开放性其实就是人人可以上网&#xff0c;网上零成本。协议栈自身的脆弱性及常见攻击协议栈自身的脆弱性常见安全风险网络的基本攻击模式物理层--物理攻击前置知识 1.打开Apache服务 cd /etc/init.d ./apache2 s…

Claude Code 的核心能力与架构解析

技术分析介绍&#xff1a;Claude Code 的核心能力与架构解析一、概述 Claude Code 是由 Anthropic 推出的面向开发者的智能编码助手&#xff0c;它不仅仅是一个代码生成工具&#xff0c;更是一个具备记忆、工具调用、自主规划和环境感知能力的“智能代理”&#xff08;Agentic …

Mac 电脑放在环境变量中的通用脚本

mac电脑下放在环境变量中&#xff0c;方便提高效率执行 注&#xff1a;相关路径需要根据实际情况进行更新 需要在 .bash_profile 文件中定义如下&#xff08;路径需要做实际替换&#xff09;&#xff1a; source $HOME/software/scripts/base_profile.sh source $HOME/software…

UE蓝图节点Add Impulse和Add Torque in Radians

​​​​​​​Add Impulse&#xff1a;对刚体施加一次性的线性脉冲&#xff08;瞬时改变量&#xff09;&#xff0c;改变速度&#xff08;与质量有关&#xff0c;除非你勾 bVelChange&#xff09;。Add Torque (in Radians)&#xff1a;对刚体施加转矩/旋转力&#xff08;向量…

大型语言模型幻觉检测与缓解技术研究综述

摘要 本文系统综述了大型语言模型(LLMs)中的幻觉现象及其检测与缓解技术。研究首先从认知机制角度分析了幻觉产生的理论根源&#xff0c;包括模型对语言先验的过度依赖、训练数据偏差以及推理过程中的信息衰减等问题。在技术层面&#xff0c;综述将现有方法归纳为三类&#xff…

【数据结构初阶】--二叉树(二)

&#x1f618;个人主页&#xff1a;Cx330❀ &#x1f440;个人简介&#xff1a;一个正在努力奋斗逆天改命的二本觉悟生 &#x1f4d6;个人专栏&#xff1a;《C语言》《LeetCode刷题集》《数据结构-初阶》 前言&#xff1a;上篇博客我们学习了有关树的概念和相关术语的介绍&…

jmm 指令重排 缓存可见性 Volatile 内存屏障

CPU指令重排 CPU指令重排是指CPU为了提高指令执行效率&#xff0c;可能会对指令的执行顺序进行优化&#xff0c;使得&#xff08;单线程下&#xff09;指令的实际执行顺序与代码中的顺序不同&#xff0c;但结果是一致的。 这种优化是通过乱序执行和缓存读写重排来实现的。 乱序…

卡车手机远程启动一键启动无钥匙进入有哪些好处

随着汽车科技的发展&#xff0c;卡车智能化升级已成为趋势&#xff0c;其中手机控车、远程启动、无钥匙进入及一键启动等功能显著提升了驾驶便捷性与安全性。以下从功能特点、技术原理、适用场景及改装建议等方面展开说明。一、核心功能及技术特点1. 无钥匙进入系统自动感应操作…

【pyqt5】SP_(Standard Pixmap)的标准图标常量及其对应的图标

目录 **常见SP_图标分类及用途** **1. 箭头和导航图标** **2. 文件和编辑操作** **3. 系统状态和通知** **4. 应用程序和菜单** **5. 数据视图控件** **完整列表(部分)** **使用建议** **6. 数据操作图标** **7. 编辑和文本操作** **8. 媒体控制图标** **9. 系统和应用状态**…