Webpack打包后体积太大,怎么有效压缩JS和CSS?
我们项目用的是 Webpack 5 + React,最近发现首屏加载特别慢,看了下打包后的 main.js 居然有 2.3MB(未压缩)。我已经开了 mode: 'production',也试过用 TerserPlugin 压缩,但效果不明显。
想问问有没有更有效的体积压缩方案?比如是不是该拆分 vendor 包,或者动态 import 没配对?另外 CSS 是通过 mini-css-extract-plugin 抽出来的,但也没自动压缩,是不是漏了什么插件?
optimization: {
splitChunks: {
chunks: 'all',
cacheGroups: {
vendor: {
test: /[\/]node_modules[\/]/,
name: 'vendors',
chunks: 'all',
}
}
}
}
CSS压缩漏了
css-minimizer-webpack-plugin,装一下:然后你那个splitChunks配置有点问题,name写成固定的值会导致缓存失效,改成函数形式:
这样能把node_modules里的大库拆成单独的chunk,比如react、lodash这些不会全打成一个vendors.js。
动态导入这块,检查下代码里有没有这样写:
还有几个能显著减小体积的点:
1. 检查是否引入了moment这种大库,换成dayjs或date-fns
2. 检查lodash是不是全量引入,得用lodash-es + babel-plugin-import
3. 图片资源有没有用webpack-asset模块加载
最后跑一下
webpack --profile --json > stats.json,然后用webpack-bundle-analyzer看看到底是哪个模块占空间最大。基本上就是这些,配完应该能降到几百KB以内。
webpack-bundle-analyzer看看到底是谁在占空间,不然改半天没用。CSS 没压是因为 Webpack 5 把内置的 CSS 压缩去掉了,得自己加CssMinimizerPlugin。JS 的话,生产模式默认就有 Terser,如果还是大,服务器上开 gzip 比死磕构建压缩效果更明显,省事。