JavaScript中如何使用Webpack缓存机制提升二次打包速度
时间:2026-08-12 | 作者:半糖攻略君 | 阅读:0Webpack 的 cache 机制,是提升二次打包速度最直接有效的手段。核心思路是把已编译的模块结果持久化保存,下次构建时跳过重复工作。
Webpack 的缓存机制,说白了就是把模块编译后的结果尽可能持久化保存下来。这样一来,二次构建的速度往往能明显提上去。
到了 Webpack 5,通常更推荐把 filesystem 缓存打开,同时配合 babel-loader 的磁盘缓存,以及 terser-webpack-plugin 的压缩缓存一起使用。
至于这些缓存有没有真正生效,则可以借助 --stats-cached 这类方式来验证。
只要配置得当,二次构建耗时可降低 60%–80%,中大型项目从几十秒缩至几秒很常见。
Webpack 5+:启用文件系统缓存
Webpack 5 内置了强大的 cache 配置,推荐使用 type: 'filesystem'(硬盘缓存)。
它比内存缓存更稳定,复用率也更高。
- 在
webpack.config.js中添加如下配置:
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename] // 配置文件变更时自动清空缓存
}
}
};
- 首次构建会生成缓存目录(默认
node_modules/.cache/webpack),后续构建直接读取; - 缓存会自动感知
package.json、babel.config.js等依赖变化,无需手动清理; - 搭配
resolve.alias或resolve.symlinks: false可避免因软链接导致缓存失效。
babel-loader 单独开启缓存
即使 Webpack 缓存已启用,babel-loader 仍可叠加一层磁盘缓存。
这样可以进一步加速 JS 转译环节。
- 在
rules中为babel-loader添加cacheDirectory: true:
test: /.js$/,
exclude: /node_modules/,
use: [{
loader: 'babel-loader',
options: { cacheDirectory: true }
}]
}
- 它会把每个文件的 Babel 编译结果存到本地临时目录(如
node_modules/.cache/babel); - 特别适合含大量 ES6+ 语法或 TypeScript 的项目,转译耗时通常占构建大头;
- 注意:不要和
cache-loader(Webpack 4 时代方案)混用,Webpack 5 中已不推荐。
terser-webpack-plugin 压缩阶段也缓存
生产环境压缩 JS 是耗时操作,terser-webpack-plugin 支持缓存。
这样可以避免每次重新压缩相同代码。
- 在
optimization.minimizer中启用:
module.exports = {
optimization: {
minimizer: [
new TerserPlugin({
cache: true,
parallel: true // 同时多线程压缩
})
]
}
};
- 缓存路径默认为
node_modules/.cache/terser-webpack-plugin; - 配合
parallel: true可进一步提速,尤其适用于多核 CPU; - 注意:仅在
mode: 'production'下生效,开发模式无需开启压缩缓存。
验证缓存是否生效
光配对还不算完,得确认它真正在工作。
- 启动构建时加
--stats-cached参数,终端会显示缓存命中详情; - 观察构建日志里是否有
cached modules、using cache类提示; - 检查
node_modules/.cache目录下是否有对应子文件夹生成; - 用
speed-measure-webpack-plugin对比开启前后的各阶段耗时,重点关注babel-loader和TerserPlugin时间下降幅度。
适用场景总结
- 开发环境:优先开启 Webpack 5 的 filesystem 缓存,以及
babel-loader缓存; - 生产环境:除了前两者,还可配合
terser-webpack-plugin压缩缓存一起使用; - 效果验证:通过
--stats-cached、日志信息和缓存目录变化进行确认。
免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。
相关文章
更多-
- JavaScript正则表达式批量处理HTML标签转义与替换方法
- 时间:2026-08-21
-
- JavaScript函数默认参数的精准JSDoc类型注解方法
- 时间:2026-08-21
-
- JavaScript设置Cookie的SameSite属性防范CSRF攻击
- 时间:2026-08-21
-
- JavaScript中BOM如何打开新的浏览器窗口标签
- 时间:2026-08-20
-
- JavaScript微任务队列在事件循环中的执行机制
- 时间:2026-08-20
-
- JavaScript中网络超时如何用流程控制实现中断
- 时间:2026-08-20
-
- JavaScript防抖函数原理与减少高频事件触发方法
- 时间:2026-08-20
-
- TypeScript六个颠覆认知的核心知识点解析
- 时间:2026-08-20
精选合集
更多大家都在玩
大家都在看
更多-
- 糖尿病完全不能吃糖吗
- 时间:2026-09-15
-
- 蚂蚁庄园小课堂2026年9月16日最新题目答案
- 时间:2026-09-15
-
- 小鸡答题今天的答案是什么2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园每日答题答案2026年9月16日
- 时间:2026-09-15
-
- 以下哪种粮食是酿造绍兴黄酒的主要原料 蚂蚁庄园今日答案9月16日
- 时间:2026-09-15
-
- 劝学名句“及时当勉励,岁月不待人”出自哪位诗人 蚂蚁庄园今日答案9.16
- 时间:2026-09-15
-
- 蚂蚁庄园今天答题答案2026年9月16日
- 时间:2026-09-15
-
- 蚂蚁庄园答题今日答案2026年9月16日
- 时间:2026-09-15
