当前位置: 首页 > news >正文

【问题解决】使用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.lryc.cn/news/614224.html

相关文章:

  • Java 之 多态
  • CSS--后端也有自己的CSS要学
  • 腾讯 WeKnora 深度解析:大模型时代文档理解与检索的技术突破
  • Git 基础操作笔记(速查)
  • 解决:开启魔法后vscode pip命令不能安装中科大python镜像问题
  • Product Hunt 每日热榜 | 2025-08-08
  • 20250808:EasyGBS 对接大华 ICC 平台问题处理
  • 智慧农业温室大棚物联网远程监控与智能监测系统
  • 存储管理、XFS 增量备份恢复、LVM
  • 医疗设备专用电源滤波器的安全设计与应用价值|深圳维爱普
  • 【探展WAIC】从“眼见为虚”到“AI识真”:如何用大模型筑造多模态鉴伪盾牌
  • 显示器同步技术终极之战:G-Sync VS. FreeSync
  • 日本语言学校|ICA国际会话学院:从原始文本到结构化事实的建模实录(工程师向)
  • 888. 公平的糖果交换
  • 机器学习之支持向量机(原理)
  • Go 踩过的坑之协程参数不能过大
  • 四、redis入门之集群部署
  • 惯量时间常数 H 与转动惯量 J 的关系解析
  • UE5 图片9宫格切割
  • B4263 [GESP202503 四级] 荒地开垦 题解
  • Go语言实战案例:简易JSON数据返回
  • PostgreSQL技术大讲堂 - 第100讲:玩转PG数据库对象权限卷之迷宫
  • day070-Jenkins自动化与部署java、前端代码
  • windows 上编译PostgreSQL
  • Flutter多引擎架构下原生通信的模块化封装与性能优化
  • 研发流程管理经验分享
  • Chrome与Firefox浏览器安全运维配置命令大全:从攻防到优化的专业实践
  • 【类与对象(中)】C++类默认成员函数全解析
  • 使用 Grunt 替换 XML 文件中的属性值
  • 50系显卡ubuntu20.04安装显卡驱动,解决gazebo不调用显卡的问题