Demo: Compare multiple builds, Single build
BundleStats webpack plugin
Analyze webpack stats(bundle size, assets, modules, packages) and compare the results between different builds.
- Bundle size and totals by file type(css, js, img, etc)
- Cache invalidation, Initial JS/CSS and other bundle specific metrics
- Assets report (entrypoint, initial, types, changed, delta)
- Modules report (changed, delta, chunks, duplicate count and percentage)
- Packages report (count, duplicate, changed, delta)
Table of Contents
Install
npm install --dev bundle-stats-webpack-plugin
or
yarn add --dev bundle-stats-webpack-plugin
Webpack configuration
// webpack.config.js
const { BundleStatsWebpackPlugin } = require('bundle-stats-webpack-plugin');
module.exports = {
...,
plugins: [
new BundleStatsWebpackPlugin()
]
}
BundleStatsWebpackPlugin(options)
-
compare
- use local saved stats for comparison (defaulttrue
). -
baseline
- save current webpack stats as baseline (defaultfalse
). -
html
- output html report (defaulttrue
). -
json
- output json report (defaultfalse
). -
outDir
- output directory relative to webpackoutput.path
(default''
). -
silent
- stop logging info and only log warning and error (defaultfalse
). -
stats
- Webpack stats options default:{ stats: { assets: true, chunks: true, modules: true, builtAt: true, hash: true } }
Use with create-react-app
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.
npm install --dev customize-cra react-app-rewired
or
yarn add customize-cra react-app-rewired --dev
Change your default scripts in package.json
to:
/* 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
.
// config-overrides.js
const { override, addWebpackPlugin } = require('customize-cra');
const { BundleStatsWebpackPlugin } = require('bundle-stats-webpack-plugin');
module.exports = override(
addWebpackPlugin(new BundleStatsWebpackPlugin()),
);
Compare mode
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
:
# Checkout to the branch/tag/commit where you want to generate the baseline
$ git checkout master
# Build your application with BUNDLE_STATS_BASELINE environmental variable
$ BUNDLE_STATS_BASELINE=true npm run build
# Checkout to the working branch/tag/commit
$ git checkout MY_FEATURE_BRANCH
# Build your application
$ npm run build
The option can be disabled by setting BundleStatsWebpackPlugin
compare
option to false
.
Other packages
bundle-stats
CLI to generate bundle stats report.
gatsby-plugin-bundle-stats
Gatsby plugin for bundle-stats.
next-plugin-bundle-stats
Next.js plugin for bundle-stats.
Related projects
🌀 relative-ci.com
In-depth webpack bundle analysis and monitoring
RelativeCI automates webpack bundle analysis, monitoring, and alerting so you can identify and fix bundle regressions before shipping to production:
🔮 Analyze webpack bundle stats on every build📈 Monitor webpack bundle stats changes and identify tendencies over extended periods🔔 Get notified via GitHub Checks, GitHub Pull Request comments, and Slack notifications🔨 Support for all major CI services (CircleCI, GitHub Actions, Gitlab CI, Jenkins, Travis CI)💕 Always free for Open Source
🌓 relative-ci/compare
Standalone web application to compare Webpack/Lighthouse/Browsertime stats.
⚡ bundle-stats-action
Github Action that generates bundle-stats reports.