详解如何修改 node_modules 里的文件


Posted in Javascript onMay 22, 2020

前言

有时候使用npm上的包,发现有bug,我们知道如何修改,但是别人可能一时半会没法更新,或者是我们特殊需求,别人不愿意修改,这时候我们只能自己动手丰衣足食。那么我们应该如何修改别人的源码呢?首先,直接修改node_modules里面的文件是不太行的,重新安装依赖就没有了。一般常用办法有两个:

  • 下载别人代码到本地,放在src目录,修改后手动引入。
  • fork别人的代码到自己仓库,修改后,从自己仓库安装这个插件。

这两个办法的缺陷就是:更新麻烦,我们每次都需要手动去更新代码,无法与插件同步更新。如果我们要修改的代码仅仅是别人的一个小模块,其他大部分代码都不动,这时候有一个很投机的操作:利用 webpack alias 来覆盖别人代码。

webpack alias 的作用

webpack alias一般用来配置路径别名,使我们可以少写路径代码:

chainWebpack: config => {
  config.resolve.alias
   .set('@', resolve('src'))
   .set('#', resolve('src/views/page1'))
   .set('&', resolve('src/views/page2'));
},

也就是说,webpack alias会替换我们写的“简写路径”,并且它对node_modules里面的文件也是生效的。这时候我们可以将别人源码里面引用模块的路径替换成我们自己的文件。
具体操作如下:

  1. 找到别人源码里面的需要修改的模块,到src目录
  2. 修改其中的bug,注意里面引用其他的文件都需要写成绝对路径
  3. 找到这个模块被引入的路径(我们需要拦截的路径)
  4. 配置webpack alias

实际操作一下

以qiankun框架的patchers模块为例:

详解如何修改 node_modules 里的文件

文件被引用的路径为:./patchers(我们要拦截的路径)

详解如何修改 node_modules 里的文件

文件内容为:

详解如何修改 node_modules 里的文件

复制内容到src/assets/patchers.js,修改其 import 路径为绝对路径,并添加我们的代码:

详解如何修改 node_modules 里的文件

配置webpack alias(我用的是vue-cli4,配置文件是vue.config.js):

const path = require('path');
module.exports = {
 chainWebpack: config => {
  config.resolve.alias
   .set('./patchers', path.resolve(__dirname, 'src/assets/patchers.js'))
 }
};

运行代码,控制台打印成功,表明我们已经成功覆盖别人的代码,而且别人的代码有更新时,我们也可以同步更新,只是这个模块的代码使用我们自定义的。打包之后也是可以的。

详解如何修改 node_modules 里的文件

补充:使用patch-package来修改

经掘友 @Leemagination 指点,使用patch-package来修改node_modules里面的文件更方便

步骤也很简单:

  1. 安装patch-package:npm i patch-package --save-dev
  2. 修改package.json,新增命令postinstall:
"scripts": {
+ "postinstall": "patch-package"
 }

修改node_modules里面的代码

执行命令:npx patch-package qiankun。

第一次使用patch-package会在项目根目录生成patches文件夹,里面有修改过的文件diff记录。

详解如何修改 node_modules 里的文件

当这个包版本更新后,执行命令:git apply --ignore-whitespace patches/qiankun+2.0.11.patch即可。其中qiankun+2.0.11.patch是它生成的文件名。

结尾

这个办法虽然投机,也有很多局限性,但是也很好用,技术就是需要不断的探索。有什么问题或者错误,欢迎指出!

到此这篇关于详解如何修改 node_modules 里的文件的文章就介绍到这了,更多相关node_modules 修改内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jquery单行文字向上滚动效果的实现代码
Sep 05 Javascript
JavaScript实现列表分页功能特效
May 15 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
mvc中form表单提交的三种方式(推荐)
Aug 10 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
html、css和jquery相结合实现简单的进度条效果实例代码
Oct 24 Javascript
JavaScript实现数组降维详解
Jan 05 Javascript
jQuery取得元素标签名称小结(附代码)
Aug 16 jQuery
Vue SSR 组件加载问题
May 02 Javascript
微信小程序中进行地图导航功能的实现方法
Jun 29 Javascript
在Create React App中使用CSS Modules的方法示例
Jan 15 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
May 06 Javascript
Node.js API详解之 readline模块用法详解
May 22 #Javascript
vue+canvas实现移动端手写签名
May 21 #Javascript
基于canvas实现手写签名(vue)
May 21 #Javascript
jQuery实现移动端笔触canvas电子签名
May 21 #jQuery
js cavans实现静态滚动弹幕
May 21 #Javascript
Object.keys() 和 Object.getOwnPropertyNames() 的区别详解
May 21 #Javascript
JavaScript实现HSL拾色器
May 21 #Javascript
You might like
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
jQuery方法简洁实现隔行换色及toggleClass的使用
2013/03/15 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
Python栈类实例分析
2015/06/15 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python如何获取服务器硬件信息
2017/05/11 Python
查看django执行的sql语句及消耗时间的两种方法
2018/05/29 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
大学毕业自我鉴定范文
2014/02/03 职场文书
会计岗位职责模板
2014/03/12 职场文书
自主招生推荐信范文
2014/05/10 职场文书
2014党员学习《反腐倡廉警示教育读本》思想汇报
2014/09/13 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
通报表扬范文
2015/01/17 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP
OpenCV-Python直方图均衡化实现图像去雾
2021/06/07 Python
Pytorch可视化的几种实现方法
2021/06/10 Python
win10更新失败无限重启解决方法
2022/04/19 数码科技