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的文件,后续升级的时候需要注意变更

相关推荐
李少兄10 分钟前
简单讲讲 SVG:前端开发中的矢量图形
前端·svg
前端小万11 分钟前
告别 CJS 库加载兼容坑
前端·前端工程化
恋猫de小郭11 分钟前
Flutter 3.38.1 之后,因为某些框架低级错误导致提交 Store 被拒
android·前端·flutter
JarvanMo15 分钟前
Flutter 需要 Hooks 吗?
前端
光影少年26 分钟前
前端如何虚拟列表优化?
前端·react native·react.js
Moment27 分钟前
一杯茶时间带你基于 Yjs 和 reactflow 构建协同流程图编辑器 😍😍😍
前端·后端·面试
invicinble1 小时前
对于前端数据的生命周期的认识
前端
PieroPc1 小时前
用FastAPI 后端 和 HTML/CSS/JavaScript 前端写一个博客系统 例
前端·html·fastapi
hunter14501 小时前
2026.1.4 html简单制作
java·前端·笔记·html
鹏程十八少1 小时前
Android 深入剖析Android内存泄漏:ViewPager2与Fragment的生命周期陷阱
android·前端·app