本文介绍了如何分析 webpack 的构建情况,为后续的优化提供了基础。
使用 webpack 内置的 stats
启动 webpack 时使用以下带参的命令,生成一个json文件:
webpack --profile --json > stats.json
--profile
:记录构建过程中的耗时信息
--json
:以JSON的格式输出构建结果
该文件的结构可参考官网文档
得到stats.json
后,可使用官方工具 Webpack Analyse 对这个文件进行分析。
在该工具中,能够得到类似的依赖图:
由于stats.json
的粒度较粗,比较难看出构建的问题所在。为此,我们可以使用以下两个方法,来具体分析构建的速度与体积。
构建速度分析
在 webpack 中,可以使用插件speed-measure-webpack-plugin
进行构建速度分析。
安装:
1 | npm i speed-measure-webpack-plugin -D |
使用:
1 | // webpack.config.js |
在导出的配置外面包裹上smp.wrap
之后,再次运行构建,就能看到以下输出:
SpeedMeasureWebpackPlugin
会将各个模块及插件的耗时情况用不同颜色标出,比如,绿色表示构建快,黄色表示构建速度一般,红色表示构建慢。
得到了各模块的耗时情况,就可以根据具体的情况进行优化。
比如图中的ExtractTextPlugin
耗时将近两分钟,我们就可以看下其中实现的代码,找出其中耗时的部分,fork 一份代码下来,根据自己的实际使用情况进行优化。
再比如图中的sass-loader
耗时24秒,我们就能试试如果用 less 是否能够更快一些。
构建体积分析
在 webpack 中,可以使用插件webpack-bundle-analyzer
进行构建速度分析。
安装:
1 | npm i webpack-bundle-analyzer -D |
使用:
1 | // webpack.config.js |
构建之后,会自动打开http://127.0.0.1:8888/,显示各个模块的体积大小:
从图上可以看出,react占据了绝大部分的体积。所以我们在优化的时候,可以考虑将react等库抽离出来,使用CDN等方式导入,以减小体积占用。