优化前端Webpack打包文件体积
· 阅读需 3 分钟
本文介绍了如何有效的减少前端 Webpack 打包文件的体积,优化网站使用体验。
最近用 umi 和 antd 搭了一个 Web App,js 文件大约 2M,体积有点大,打算优化一下。
分析
使用webpack-bundle-analyzer查看各个包占的体积
在.umirc.js 配置插件:
const BundleAnalyzerPlugin = require('umi-webpack-bundle-analyzer').BundleAnalyzerPlugin
...
chainWebpack(config) {
process.env.NODE_ENV === 'production' &&
process.env.analyze === 'true' &&
config.merge({
plugin: {
bundleAnalyzer: {
plugin: BundleAnalyzerPlugin,
args: [{ analyzerPort: 3030 }]
}
}
})
}
...
优化
使用 Day.js 替换 moment.js
Antd 会使用到 moment.js,从上放图可以看出,左下方 moment 占有了较大的体积。这里我们轻量的 Day.js 插件来替换 moment.js。Antd 提供了一个方便替换的插件antd-dayjs-webpack-plugin。
减小 lodash 的体积
使用时,避免引入整个 lodash 包:
import _ from 'lodash'
// 替换为
import _get from 'lodash/get'
同时可以使用lodash-webpack-plugin插件来进一步减小体积。
减小 Ant Design Icon 的体积
从上方的分析图可以看,左侧 Antd icon 文件占了很大一部分体积,因为 Antd 新版本包含了多个样式很多的 icon 的 svg。
如果 Icon 使用的个数有限,可以通过临时解决方案来减小打包体积。但如果项目中有配置的 icon 类型,比如<Icon type={icon} />
这样的写法就不适用了。具体可以参见讨论 issue。这个占时不做修改,期待 Antd 4.0 有更好的解决方案。
结果
优化后,体积 2M→1.6M,减小了 20%