需求总是千变万化,npm 不是万能的,node_modules 里面的文件也是需要维护的。

如果 npm install 安装了某个包,然而这个包里面部分文件不支持你的需求,这时候怎么办?

比如:https://github.com/svg/svgo 此包可以批量处理 svg 文件,但是是 nodejs 运行环境,如何做到在浏览器端运行?如: https://tiny.jijian.link 这个浏览器端的图片压缩神器。

方法一

直接修改 node_modules 文件,当然你得记得改了些啥,否则下次 npm install 文件就会被覆盖。

方法二

使用 patch-package 修改,还是不够完美,需要额外安装 patch-package,还需要执行各种命令。

详细阅读: https://blog.jijian.link/2020-07-23/webpack-alter-file/

方法三

使用 webpack alias 实现替换文件。此方法仅适用于 webpack 维护的项目。

alias 作用基本都知道,设置路径别名,可使用短路引入文件。

其实 alias 作用不仅于此,还能作用于 node_modules 中的文件。

比如: svgo/lib/svgo/tools.js 中 require('fs') 在浏览器端会导致 fs not found 错误,我们需要修改里面的代码,让其不报错。

方法:

  1. 复制 svgo/lib/svgo/tools.js 到项目任意位置,修改里面代码,记住此处项目位置。
  2. 修改 webpack 配置。
    其中 ../lib/svgo/tools 是 svgo 包里面的引用路径,src/svgo/lib/svgo/tools.js 是修改后的文件路径。
    1 chainWebpack: config => {
    2 config.resolve.alias.set('../lib/svgo/tools', require('path').resolve(__dirname, 'src/svgo/lib/svgo/tools.js'));
    3 return config;
    4 },

总结

三种方法各有春秋,需根据需求选择。

webpack 科学修改 node_modules 某个包的部分文件为本地文件的更多相关文章

  1. 修改http请求文件为本地文件的一种方法:hook InternetReadFile 和 HttpOpenRequest

    今天没事的时候学了一下easyhook来hook本进程API,确实很简单就能hook.然后想到这个问题:替换webbrowser请求的文件为本地文件.有什么用就不说了,都懂.因为没有用API写过htt ...

  2. VSCode代码修改后跑起来没反应,打开本地文件,代码没变化

    两种解决办法: 首先:修改VSCode默认配置文件,点击左下角设置标志图 -> 设置,出来了设置相关的东西,搜索 files.autoSave 第一种:把"files.autoSave ...

  3. 如何修改 node_modules 里的文件

    前言 有时候使用npm上的包,发现有bug,我们知道如何修改,但是别人可能一时半会没法更新,或者是我们特殊需求,别人不愿意修改,这时候我们只能自己动手丰衣足食.那么我们应该如何修改别人的源码呢?首先, ...

  4. 修改android应用包名 分类: android 学习笔记 2015-07-16 22:48 4人阅读 评论(0) 收藏

    由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...

  5. 修改android应用包名

    由于项目需要,要修改已经开发好的应用包名,这本身很简单,但是如果你没找到门道,可能会白白浪费许多时间. 修改包名有三个地方要改,这三个地方的修改一定要按顺序来,否则你可能会遇到许多不必要的麻烦. 1. ...

  6. 在用node安装某个全局模块的时候,没有权限修改node_modules

    一.问题 今天在安装公司内部的一个npm模块的时候,发现报错了⬇ 第一行错误: deprecated graceful-fs@1.2.3: please upgrade to graceful-fs ...

  7. AndroidStudio修改程序的包名,可以修改com.example.xxx之类的详解

    转载请说明出处.原创作品. 首先说明一下,当时公司需要修改androidStudio 项目的包名 于是上网查了一下,只看到了修改后面的包名,而不可以修改 前缀的com.example.xxx.所以很无 ...

  8. 如何将本地的jar包上传到maven本地仓库中

    首先需要将本地的jar包做mvn install到本地仓库中 mvn install:install-file -Dfile=D:\skyeye-ruleInfo\lib\lucene-querypa ...

  9. 浅析PAC,教你动手修改你的PAC文件及user-rule文件实现自动代理

    Shadowsocks作为现在一种很流行的穿墙工具,以其轻量级.速度感人等优点深受广大网友热捧.与VP_N相比,他就像一把锋利的”瑞士军刀”,不用受制于“系统全局代理”模式的困扰,控制更加便捷,基于S ...

  10. 【Eclipse】Eclipse中tomcat的Server配置(解决修改代码不断的重启服务器)以及设置tomcat文件发布位置与JSP编译位置查看

     Eclipse有时候修改一点JS或者JSP都会自动重启,有时候修改完JS或者JSP之后必须重启服务器才生效,下面研究了server的一些选项之后彻底解决了这些问题,下面做记录: 我的 Eclipse ...

随机推荐

  1. [转]vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/)

    1.vcpkg+opencv4(sfm+vtk)+openMVS+SFM算法-github代下载(http://gitd.cc/) 2.OpenMVS详细安装教程(ubuntu18.04) 3.ubu ...

  2. Ubuntu 20.04编译opencv-3.1.0时报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope

    Ubuntu 20.04源码编译安装opencv320 报错 error: 'CODEC_FLAG_GLOBAL_HEADER' was not declared in this scope的解决办法 ...

  3. Unix和Windows操作系统中路径中的正斜杠和反斜杠的区别

  4. 巧技拾遗 | JavaScript 中 Array.every 和 Array.map 的巧妙结合

    这几天在跟着学一点 vue3 + TypeScript 中表单验证的实例,看到一个实现,觉得非常巧妙. 需求概述 我们有一个列表 funcArr ,里面存放函数,比如 funcArr = [ func ...

  5. milvus基础

    nlist和nprobe nlist 是调用 create_index 时设置的参数,nprobe 则是调用 search 时设置的参数. IVFLAT 和 SQ8 索引都是通过聚类算法把大量的向量划 ...

  6. WxPython跨平台开发框架之模块字段权限的管理

    在我的很多Winform开发项目中,统一采用了权限管理模块来进行各种权限的控制,包括常规的功能权限(工具栏.按钮.菜单权限),另外还可以进行字段级别的字段权限控制,字段权限是我们在一些对权限要求比较严 ...

  7. Solution Set -「LOCAL」冲刺省选 Round XXVII

    \(\mathscr{Summary}\)   还行,B 题挺不错,C 题就省选来说有点水(? \(\mathscr{Solution}\) \(\mathscr{A-}\) 分裂   初始时,你有一 ...

  8. runoob-android

    https://www.runoob.com/android/android-tutorial.html https://www.runoob.com/w3cnote/android-tutorial ...

  9. PMP视频总结

    https://edu.51cto.com/center/wejob/user/course?train_id=955 重要链接:①[PC端学习平台]:https://edu.51cto.com/ce ...

  10. w3cschool-MyBatis 教程

    参考 https://www.w3cschool.cn/mybatis/mybatis-dyr53b5w.html MyBatis 入门 SqlSessionFactoryBuilder用 SqlSe ...