In-depth bundle analyzer for webpack(bundle size, assets, modules, packages)
npm install bundle-stats-webpack-plugin
Demos:
Bundle analysis comparison ·
Bundle analysis
Analyze bundle stats(bundle size, assets, modules, packages) and compare the results between different builds. Support for webpack, rspack, vite, rollup and rolldown.
- Bundle size and totals by file type(css, js, img, etc)
- Insights: duplicate packages, new packages
- Initial JS/CSS, Cache invalidation, and other bundle metrics
- Assets report (entrypoint, initial, types, changed, delta)
- Modules report (changed, delta, chunks, duplicate count and percentage)
- Packages report (count, duplicate, changed, delta)
:star: Side by side comparison for multiple builds
``shell`
npm install --dev bundle-stats-webpack-plugin
or
`shell`
yarn add --dev bundle-stats-webpack-plugin
`js
// webpack.config.js
const { BundleStatsWebpackPlugin } = require('bundle-stats-webpack-plugin');
module.exports = {
...,
plugins: [
new BundleStatsWebpackPlugin()
]
}
`$3
- compare - use local saved baseline for comparison (default true).baseline
- - save current webpack stats as baseline (default false).html
- - output html report (default true).json
- - output json report (default false).outDir
- - output directory relative to webpack output.path (default '').baselineFilepath
- - baseline filepath relative to webpack output.path (default 'node_modules/.cache/bundle-stats/baseline.json')silent
- - stop logging info and only log warning and error (default false).stats
- - Webpack stats options`
default:
js`
// webpack.config.js
module.exports = {
// ...
stats: {
assets: true,
chunks: true,
modules: true,
builtAt: true,
hash: true,
},
};
How to configure webpack for better debugging and monitoring
#### How to exclude virtual modules
Some plugins use virtual modules as an intermediary step when generating JS modules. For example, vanilla-extract creates a virtual module for every .css.js/css.ts file based on the loader module path and the filename/source as query parameters:
``
./node_modules/@vanilla-extract/webpack-plugin/vanilla.virtual.css?%7B%22fileName%22%3A%22src%2Fcomponents%2Fcomponent%2Fcomponent.css.ts.vanilla.css%22%2C%22source%22%3A%22...%22%7D
Inlining the encoded source and the filename causes an increase in the size of the output stats and adds unnecessary entries to the stats. To ignore vanilla-extract virtual modules from the stats and from the bundle analysis report, use excludeModules option:
`js`
// webpack.config.js
module.exports = {
// ...
stats: {
excludeModules: [
/@vanilla-extract\/webpack-plugin\/vanilla-virtual\.css/,
],
},
};
You will need to customize the default webpack config. That can be done by using react-app-rewired which is one of create-react-app's custom config solutions. You will also need customize-cra.
`shell`
npm install --dev customize-cra react-app-rewired
or
`shell`
yarn add customize-cra react-app-rewired --dev
Change your default scripts in package.json to:
`json`
/ package.json /
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test"
}
Create a file config-overrides.js at the same level as package.json.
`js
// config-overrides.js
const { override, addWebpackPlugin } = require('customize-cra');
const { BundleStatsWebpackPlugin } = require('bundle-stats-webpack-plugin');
module.exports = override(
addWebpackPlugin(new BundleStatsWebpackPlugin()),
);
`
In compare mode, the metrics are compared against an existing(node_modules/.cache/bundle-stats/baseline.json) Webpack stats file(baseline). To generate the baseline webpack stats, set BUNDLE_STATS_BASELINE environmental variable to true or set BundleStatsWebpackPlugin baseline option to true:
`shellCheckout to the branch/tag/commit where you want to generate the baseline
$ git checkout master
The option can be disabled by setting
BundleStatsWebpackPlugin compare option to false`. 
CLI to generate bundle stats report.
 
Gatsby plugin for bundle-stats.
 
Next.js plugin for bundle-stats.
 
Rollup plugin to generate bundle stats report for vite/rolldown/rollup.
#### Automated bundle analysis, reviews and monitoring - Quickly identify and fix bundle regressions before shipping to production.
- :crystal_ball: In-depth bundle stats analysis for every build
- :chart_with_upwards_trend: Monitor bundle stats changes and identify opportunities for optimizations
- :bell: Quick feedback with rule based automated review flow, GitHub Pull Request comments, GitHub check reports, or Slack messages
- :wrench: Support for webpack, vite, rspack, rollup, rolldown
- :hammer: Support for all major CI services(CircleCI, GitHub Actions, Gitlab CI, Jenkins, Travis CI)
- :nut_and_bolt: Support for npm, yarn and pnpm; support for monorepos
- :two_hearts: Always free for Open Source
Standalone web application to compare Webpack/Lighthouse/Browsertime stats.
Github Action that generates bundle-stats reports.