开始
这一章讲打包体积优化,这个也算是最重要的一章了,我之前可是花了很多时间去查资料怎么优化打包体积的,不同版本的webpack之间还有一些区别,所以也算踩了很多的坑,所以这一章会比较长。
这边我大概写了一下页面具体布局,是下面这样的:
我们再去看一下打包体积,有2.75M,已经算很大了:
我们使用一个打包可视化的插件来看看都有什么被打包进去了,我们执行:
yarn add webpack-bundle-analyzer -D
在webpack.config.prod.js的plugins里添加一行,注意端口可以修改,别冲突了:
new BundleAnalyzerPlugin({
analyzerPort: 8081 })
修改完成后,执行yarn run build命令,在浏览器弹出窗口,我的是这样的:
可以清晰的看到antd和react-dom就占了一半多,下面来优化。
1. 修改mode
我们去webpack.config.prod.js里:
//mode:'development'
mode:'production' //修改成开发环境
然后查看打包体积,瞬间减少了一半多,修改成开发环境webpack会自动的去优化包体积,比如压缩代码之类的:
2. antd按需加载
在控制台执行:
yarn add babel-plugin-import -D
然后去webpack.config.common.js配置:
plugins:[
"@babel/plugin-transform-runtime",
['import',{
libraryName:'antd',
libraryDirectory: 'es',
style:true
}]
]
在less的配置里修改:
{
loader:'less-loader',
options:{
javascriptEnabled: true
}
}
然后我们去使用到antd组件的地方,修改成以下这样的形式引入:
// import Col from 'antd/lib/col';
// import Row from 'antd/lib/row';
// import "antd/dist/antd.css"; //css也去掉
import {
Col,Row} from 'antd'
再执行打包命令,变成601kb:
3. mini-css-extract-plugin提取css
我们使用mini-css-extract-plugin来将css从js里分离出来。在控制台执行:
yarn add mini-css-extract-plugin -D
在webpack.config.prod.js里配置:
//在顶部引入
const MiniCssExtractPlugin=require('mini-css-extract-plugin');
//在plugins里添加
new MiniCssExtractPlugin({
//提取css
filename:'css/main.css'
}),
这样我们可以将css单独分离到css文件夹里。然后再打包看看:
我们发现js包变小,css也被分离出来了,但是css居然有223kb,打开css文件,我们发现css没有被压缩掉。
我们在控制台执行,这两个插件前者是压缩css的,后者是压缩js的,本来在生产环境下会压缩js的,但是使用optimize-css-assets-webpack-plugin会导致压缩js无效,所以我们需要额外引入一个压缩js的插件:
yarn add optimize-css-assets-webpack-plugin uglifyjs-webpack-plugin -D
我们在webpack.config.common.js里配置:
//这个配置和module,plugins是同级的
optimization:{
minimizer