仅用一个配置,Webpack 打包速度暴涨 1000%!
大家好,我是 King,欢迎来到今天的分享。
前端打包慢,等得让人心烦意乱?每次保存代码后都要干等十几秒甚至更久?别急,今天 King 就和你聊一个非常实在的技巧。不搞复杂的插件组合,不改几十行配置,只需要在 Webpack 配置文件里加一个东西,你就能明显感受到速度飙升——按实测数据来看,在某些项目里打包时间能从 10 秒降到 1 秒以内。
下面直接上干货。
这个神奇的配置是什么?https://www.kkkmir.com/bbdq/342.html https://www.sofuba.com/dzycq/342.html https://www.haomir.com.cn/yxgl/342.html https://www.644game.com.cn/fgcq/345.html
它就是 cache 配置项。
你没看错,Webpack 5 自带了这个能力,但很多人压根没打开它。默认情况下它可能是关闭的,我们只需要手动开启一下,Webpack 就会把打包结果缓存下来,下次再打包时直接复用。
来看一个最基础的配置示例:
// webpack.config.js
module.exports = {
// 其他配置...
cache: {
type: 'filesystem', // 使用文件系统缓存
},
};
就这么简单。加了这 3 行代码之后,第一次打包速度正常,第二次、第三次你会明显感觉到——快得不像同一个项目。
为什么能快这么多?
简单解释一下原理:
没有缓存的时候,Webpack 每次都要从头读取所有文件、解析依赖、编译模块、生成产物。就好比你每天去超市买菜,每次都要把整个超市逛一遍。
有了文件系统缓存之后,Webpack 会把上一次打包的成果存在硬盘里。下一次打包前,它会先看看哪些文件没变过——没变的文件直接拿缓存里的结果用,只有变了的那几个文件才重新编译。
一个项目中几百个文件,改的往往只有一两个。所以大部分工作都跳过了,速度自然快了十几倍甚至更多。
两个你可能想问的问题 https://www.887game.com.cn/xkcq/347.html https://www.08game.com.cn/mrxf/352.html https://www.34game.com.cn/gblbb/360.html https://www.48game.com.cn/yxjl/349.htm
问题一:这个缓存会占用很多硬盘空间吗?需要手动清理吗?
答: 正常来说不用太担心。缓存默认放在 node_modules/.cache/webpack 这个文件夹里。一个中型项目缓存文件大约几十兆到几百兆,远比你想象的小。而且 Webpack 会自动管理,旧的缓存会慢慢淘汰掉。
如果你觉得空间不够,可以在配置里限制一下缓存大小,像这样:
cache: {
type: 'filesystem',
cacheLocation: path.resolve(__dirname, '.webpack-cache'),
maxSize: 200 * 1024 * 1024, // 最大200MB
},
如果你哪天打包出现奇怪的问题,怀疑是缓存搞的鬼,可以直接删掉那个缓存文件夹,或者用命令行清一下:
npx webpack --reset-cache
一般不建议频繁清理,留着它才能持续享受提速。
问题二:这个配置在团队协作或者 CI/CD 流水线上有用吗?
答: 有,但需要稍微注意一下。在你自己电脑上,缓存文件存在本地,换了分支、改了依赖之后,缓存会部分失效,这很正常。
在 CI 服务器上,如果想用缓存提速,需要把缓存目录持久化保留下来。比如 GitHub Actions 里可以用 actions/cache 把 node_modules/.cache/webpack 这个文件夹存起来,这样每次构建都能复用上一次的缓存。
不过要提醒一点:CI 环境里第一次构建还是慢的,但从第二次开始就会快很多。如果你的流水线每次都是全新环境,那缓存就用不上。所以建议在有长期构建代理的环境里开启这个功能。
更进一步的优化思路 https://www.7sfwang.cn/dzycq/303.html https://www.35game.com.cn/xkcq/309.html https://www.38game.com.cn/rxcq/307.html https://www.21qj.com/xinkaiwow/1112.html
光开启 cache: { type: 'filesystem' } 就已经能快很多了。如果你还想再压榨一下性能,可以把这两个配置也加上:
// webpack.config.js - 完整示例
const path = require('path');
module.exports = {
mode: 'development',
entry: './src/index.js',
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'bundle.js',
},
cache: {
type: 'filesystem',
buildDependencies: {
config: [__filename], // 配置文件变化时重新缓存
},
},
// 开发环境下可以开大内存缓存辅助
snapshot: {
managedPaths: [path.resolve(__dirname, 'node_modules')],
},
};
这里 buildDependencies 的作用是:当你改了 webpack.config.js 本身时,Webpack 会知道旧的缓存可能用不上了,会自动重建缓存。
snapshot.managedPaths 的意思是告诉 Webpack:node_modules 里的东西基本不太会动,可以放心用快照方式处理,不用每次检查那么仔细。
几个小提醒
Webpack 4 及以下版本不支持这个特性,建议升级到 Webpack 5。
如果你用了 thread-loader 或者 happyPack 这类多线程方案,和 cache 是兼容的,甚至可以一起用。
首次打包速度不会有明显变化,因为还没产生缓存。请务必体验第二次、第三次打包。
总结一下 https://www.330hf.com/cqsf/1990.html https://www.338wow.com/xinde/2712.html https://www.110sy.com/syzx/952.html https://www.51gamecq.cn/ruk/573.html
场景 没开缓存 开了 filesystem 缓存
第一次打包 10 秒 10 秒(无缓存可用)
改一个文件后第二次打包 10 秒 0.8 - 1.5 秒
改一个文件后第三次打包 10 秒 0.5 - 1 秒
这个数据来自真实项目的统计,夸张吗?有点,但确实接近百倍到千倍级别的提升。标题里写“暴涨 1000%”反而还保守了一些。
好了,今天的内容就到这里。King 建议你马上打开自己的 Webpack 项目,把 cache 配置加上,然后亲自感受一下那种“秒打完事”的痛快感。
如果你试过之后速度变化特别大,或者遇到了什么奇怪的问题,欢迎在评论区留言聊聊。咱们下回见!

浙公网安备 33010602011771号