Webpack缓存失效?一文搞定排查难题!

背景

由于项目构建比较耗时,因此想到启用webpack持久化缓存来提升二次构建速度

webpack persistent cache设置

设置了缓存类型为 'filesystem',并且指定当 webpack 配置文件发生变化时,缓存失效。这样,如果配置文件发生变化,Webpack 就会重新构建所有的模块,以确保构建结果的正确性

js 复制代码
module.exports = {  
  //...  
  cache: {  
    type: 'filesystem', // 缓存类型,默认是 'filesystem'  
    buildDependencies: {  
      config: [__filename], // 当 webpack 配置文件发生变化时,缓存失效  
    },  
  },  
  //...  
};

遇到的问题

底层是使用create-react-appreact-scripts,但是设置缓存后,一直无法生成缓存文件,同时缓存也未生效

缓存不生效的原因:compiler.run之后,没有执行compiler.close

create-react-app相关问题issues:

webpack相关说明:webpack.js.org/api/node/#r...

Don't forget to close the compiler, so that low-priority work (like persistent caching) have the opportunity to complete.

如何查看缓存是否生效:开启webpack构建logger功能(infrastructureLogging.debug = true;

webpack相关说明文档:webpack.js.org/configurati...

  • 二次构建速度明显变快(整个来说),看到下面的日志,即可看到缓存开始生效。

[webpack.cache.PackFileCacheStrategy] starting to restore cache content

其它问题:

  • thread-loader跟webpack cache 兼容性问题,第2次以及后续构建时,构建快结束时,progress会block掉,初步推测是多线程和compiler之间协调有问题(暂未解决
  • mini-css-extract-plugin跟缓存不兼容,可能是有css问题

相关问题issue:github.com/webpack/web...

解决方案

修改react-scripts的build文件,在里面添加类似的实现代码,因此需要修改node端require相关逻辑,使得require('react-scripts/scripts/build') 指向我们的期望的build文件,该build文件是react-scripts build文件的加强(魔改 )版本

存在的风险

修改了 react-scripts的文件,后续升级的时候需要注意变更

相关推荐
IT枫斗者8 小时前
IntelliJ IDEA 2025.3史诗级更新:统一发行版+Spring Boot 4支持,这更新太香了!
java·开发语言·前端·javascript·spring boot·后端·intellij-idea
N***p3658 小时前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
享誉霸王9 小时前
15、告别混乱!Vue3复杂项目的规范搭建与基础库封装实战
前端·javascript·vue.js·前端框架·json·firefox·html5
a11177610 小时前
飞机躲避炸弹 网页游戏
前端·开源·html·threejs
夏乌_Wx10 小时前
mybash:简易 Shell 实现的设计思路与核心模块解析
linux·服务器·前端
滕青山10 小时前
URL编码/解码 核心JS实现
前端·javascript·vue.js
菜鸟小芯11 小时前
【GLM-5 陪练式前端新手入门】第五篇:响应式适配 —— 让个人主页 “见机行事”
前端·人工智能
无名之逆12 小时前
你可能不需要WebSocket-服务器发送事件的简单力量
java·开发语言·前端·后端·计算机·rust·编程
加农炮手Jinx12 小时前
Flutter for OpenHarmony:web_socket_channel 全平台 WebSocket 通信标准库,从原理到鸿蒙实战(3000字深度解析)
android·前端·网络·websocket·flutter·华为·harmonyos
王码码203512 小时前
Flutter for OpenHarmony:web_socket 纯 Dart 标准 WebSocket 客户端(跨平台兼容性之王) 深度解析与鸿蒙
android·前端·websocket·网络协议·flutter·华为·harmonyos