重构之路:webpack打包体积优化(超详细)

开始

这一章讲打包体积优化,这个也算是最重要的一章了,我之前可是花了很多时间去查资料怎么优化打包体积的,不同版本的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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值