基于webpack修改插件源码,使用自定义文件替换node_modules里面的源码文件

需求:插件不满足要求,需要修改源码,但又想永远保留自己修改的这份,不想被重新下载的覆盖

方法:在运行时执行你替换的方法,将你自定义的文件替换依赖包上的

案例:react+umi.js

1、自己写替换源码文件的方法,这个方法我写在change-modules.js上

2、在node_modules里将你需要修改的文件复制一份出来修改,放在静态资源的文件夹里,自定义一个也叫node_modules的文件夹,按照依赖包里的目录结构把复制的文件放进去,目录结构必须一致

依赖包的node_modules结构

自定义的node_modules结构

  • change-modules.js源码

const fs = require('fs');

const path = require('path');

// 解决 node_modules 修改源码,导致重新装包而要手动替换源码的重复操作。

// 将 scripts/node_modules 内的文件 覆盖 真正的 node_modules

const REAL_NODE_MODULES = path.resolve('./node_modules');   // 旧node_modules

const MY_NODE_MODULES = path.resolve('./scripts/node_modules');  // 新node_modules

copy(MY_NODE_MODULES, REAL_NODE_MODULES);

/**

* 复制目录中的所有文件包括子目录

* @param {string} 需要复制的目录、文件

* @param {string} 复制到指定的目录、文件

* @param {function} 每次复制前,都会经过一次filterFn,若返回true,则复制。

*/

function copy(oringe, target,filterFn = ()=> true) {

if (fs.statSync(oringe).isDirectory()) {

// 来源是个文件夹,那目标也整一个文件夹

if (!fs.existsSync(target)) {

fs.mkdirSync(target)

}

fs.readdirSync(oringe).forEach(oringeName => {

const oringeFilePath = path.resolve(oringe, oringeName);

const targetFilePath = path.resolve(target, oringeName);

copy(oringeFilePath, targetFilePath, filterFn);

});

} else if(filterFn(oringe, target)){

fs.copyFileSync(oringe, target);

}

}

2、在package.json文件添加指令,路径指向你定义的替换方法,如change-modules.js,并且在运行的指令上添加change-modules这个指令,或者直接在运行命令里添加change-modules.js的脚本进去,也是一样的效果。

3、重新运行项目,你会发现依赖包的文件已经变成你修改的那份

基于webpack修改插件源码,使用自定义文件替换node_modules里面的源码文件相关推荐

  1. QML 地图修改插件源码(三),Map在Plugin中设置加载地图类型

    常用的地图种类分为交通图,地形图,卫星图等等,在QML的Map(以OSM地图为例)中提供activeMapType属性用于读取当前显示的地图类型(注意:该属性为只读属性,不能用于赋值),QML中地图的 ...

  2. QML 地图修改插件源码(四),Map根据目录作为索引加载地图瓦片

    QML中的地图(以OSM为例)在使用过程中会发现当地图层数很多时,特别是如果使用离线地图且地图层级较多时地图会变得很卡(在线地图加载的层级数多且不清除缓存时也会卡),原因在于QML地图插件对地图瓦片的 ...

  3. 基于elementui源码实现自定义穿梭框transfer组件

    需求:更改elementui中el-transfer样式, 实现单击左侧选项即加入右边选框,单击右侧选项即可回到左侧选框,中间左右来回按钮更改为左侧全选右侧全选,最终修改后效果图如下 下图源码可通过g ...

  4. java毕业设计—— 基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码)——婴幼儿产品销售系统

    基于java+JSP+SSH的婴幼儿产品销售系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+JSP+SSH的婴幼儿产品销售系统设计与实现,文章末尾附有本毕业设计的论文和源码下 ...

  5. android毕业设计——基于Android+Tomcat+JavaEE的旧物交易平台设计与实现(毕业论文+程序源码)——旧物交易平台

    基于Android+Tomcat+JavaEE的旧物交易平台设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+Tomcat+JavaEE的旧物交易平台设计与实现,文章末尾附有 ...

  6. Android毕业设计——基于Android+Tomcat的网络视频探索系统设计与实现(毕业论文+程序源码)——网络视频探索系统

    基于Android+Tomcat的网络视频探索系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Android+Tomcat的网络视频探索系统设计与实现,文章末尾附有本毕业设计的论文和源 ...

  7. 【java毕业设计】基于java+SSH+jsp的酒水销售系统设计与实现(毕业论文+程序源码)——酒水销售系统

    基于java+SSH+jsp的酒水销售系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+SSH+jsp的酒水销售系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  8. 【java毕业设计】基于java+BS的QQ屏幕截图工具设计与实现(毕业论文+程序源码)——屏幕截图工具

    基于java+BS的QQ屏幕截图工具设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+BS的QQ屏幕截图工具设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. 文章目录: ...

  9. 【java毕业设计】基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码)——连连看游戏

    基于java+swing+GUI的连连看游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+GUI的连连看游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

最新文章

  1. event对象获取方法总结在google浏览器下测试
  2. 在Android上使用Socket
  3. 对象创建方法,对象的内存分配,对象的访问定位
  4. springboot+maven实现模块化编程
  5. Ubuntu设置中修改密码,提示长度太短或太简单【终极解决办法】
  6. Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
  7. (1)DBA查询:数据库
  8. Quartz使用-入门使用(java定时任务实现)
  9. 该如何来开发这个喜欢的功能呢?
  10. MySQL------存储过程的使用
  11. 密码密文 android,Android登录页面密码明文密文的切换
  12. amd核芯显卡控制面板自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...
  13. linux下文本处理
  14. 上海富勒wms_国内WMS前三名是哪几家
  15. SAP SHIFT语法注意
  16. 从技术雷达看​DevOps的十年——容器技术和微服务
  17. PHP 文件下载 浅析
  18. NOIP2012 提高组初赛试题讲解
  19. Redis:字符串SET、SETNX、SETEX、PSETEX、GET、GETSET命令介绍
  20. CRC32 tools in Ubuntu /fedora

热门文章

  1. 四旋翼无人机建模与实现(二)
  2. MySQL各种优化基于《高性能MySQL第三版》
  3. “京算盘”家庭理财软件开发日志(二)需求定义
  4. qt 从文件中读出数据显示在表格中_java如何从文件中读取数据存在数组再显示在表格中!!...
  5. Android U盘 读写
  6. [JQ权威指南]使用JQuery调用XML实现无刷新即时聊天
  7. 时间转换——Java
  8. 网站对接支付宝,微信支付接口史上最详细教程
  9. 空间复杂度(超详解+例题)
  10. 计算机接口硬盘,电脑硬盘有几种 接口有几种?