webpack --config webpack.config.prod.js --profile --json > stats.json
--profile
:记录下构建过程中的耗时信息
--json
:以 JSON 的格式输出构建结果,最后只输出一个 .json
文件,这个文件(stats.json
)中包括所有构建相关的信息
> stats.json
:是 UNIX/Linux 系统中的管道命令、含义是把 webpack --profile --json
输出的内容通过管道输出到 stats.json
文件中
执行命令后,会在项目中多出一个 stats.json
文件,接下来将 stats.json
文件上传到以下在线工具上,以可视化分析包的组成。
常用的在线工具有:
官方可视化分析工具 Webapck Analyse:生成一个图表,让你可视化了解项目的依赖关系、模块大小及耗时等;
Webpack Visualizer:生成一个饼状图,可视化 bundle 内容;
webpack bundle optimize helper:此工具会分析你的 bundle,并为你提供可操作的改进措施建议,以减少 bundle 体积大小。
2. 官方可视化分析工具 Webapck Analyse
Webapck Analyse 是一个在线 Web 应用,它为你提供了对包的更全面的分析,并且它绘制了项目中所有依赖模块的图形,这对于依赖关系较少的项目非常有用。
打开 Webapck Analyse ,上传 stats.json
:
Webpack Analyse 不会把你选择的 stats.json
文件发达到服务器,而是在浏览器本地解析,你不用担心自己的代码为此而泄露。 选择文件后,你马上就能如下的效果图:
Modules :展示所有的模块,每个模块对应一个文件。并且还包含所有模块之间的依赖关系图、模块路径、模块ID、模块所属 Chunk、模块大小;
Chunks :展示所有的代码块,一个代码块中包含多个模块。并且还包含代码块的ID、名称、大小、每个代码块包含的模块数量,以及代码块之间的依赖关系图;
Assets :展示所有输出的文件资源,包括 .js
、.css
、图片等。并且还包括文件名称、大小、该文件来自哪个代码块;
Warnings :展示构建过程中出现的所有警告信息;
Errors :展示构建过程中出现的所有错误信息;
Hints :展示处理每个模块的过程中的耗时。
3. Webpack Visualizer 分析工具
可视化并分析您的Webpack捆绑包,以查看哪些模块正在占用空间,哪些可能是重复的。
它既可作为插件使用,也可以在线使用,是一种较新的工具。
方式一:作为插件使用
npm install webpack-visualizer-plugin --dev-save
复制代码
配置:
const Visualizer = require('webpack-visualizer-plugin');
module.exports = {
plugins: [
new Visualizer({
filename: './statistics.html'
复制代码
然后在浏览器中直接打开 statistics.html
就可以看到分析结果了:
方式二:在线使用
打开 chrisbateman.github.io/webpack-vis… ,上传 stats.json
既可看到分析结果。
4. webpack bundle optimize helper 分析工具
打开 webpack.jakoblind.no/optimize/ ,上传 stats.json
既可看到分析结果及优化建议:
我们总共介绍了以下 5
种测量工具,每种工具都提供了对包分析的不同视角,例如:
在开发过程中,当向项目引入新包时,我个人经常使用 Webpack Visualizer ,饼状图给出了关于大小的比例的即时反馈;
在分析每次构建版本的耗时情况时,相对于其它 4
中,speed-measure-webpack-plugin
能够获取每个插件和 loader 的耗时情况,帮助你将注意力集中在需要优化的插件上;
webpack-bundle-analyzer
能够将 bundle 内容展示为便捷的、交互式、可缩放的树状图形式;
Webapck Analyse 相对于其它 4
种,能够对包进行全方位的分析;
相对于其它 4
种,webpack bundle optimize helper 能提供可操作的改进措施建议;
五、往期 webpack 系列
webpack 最佳配置指北
窥探原理:手写一个 JavaScript 打包器
如果觉得不错,就点个赞吧!👍👍👍
想看往期更过系列文章,点击前往 github 博客主页
六、走在最后
❤️玩得开心,不断学习,并始终保持编码。👨💻
如有任何问题或更独特的见解,欢迎评论或直接联系瓶子君(扫码关注公众号回复 123 即可)!👀👇
👇欢迎关注:前端瓶子君,每日更新!👇