Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ZachGawlik/webpack-stats-diff-plugin
Webpack plugin for reporting changes in bundle sizes across builds
https://github.com/ZachGawlik/webpack-stats-diff-plugin
webpack webpack-plugin webpack-stats
Last synced: about 1 month ago
JSON representation
Webpack plugin for reporting changes in bundle sizes across builds
- Host: GitHub
- URL: https://github.com/ZachGawlik/webpack-stats-diff-plugin
- Owner: ZachGawlik
- License: mit
- Created: 2018-05-20T21:08:31.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2018-08-25T02:26:31.000Z (over 6 years ago)
- Last Synced: 2024-09-20T04:14:06.678Z (3 months ago)
- Topics: webpack, webpack-plugin, webpack-stats
- Language: JavaScript
- Size: 1.02 MB
- Stars: 61
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome - webpack-stats-diff-plugin - Webpack plugin for reporting changes in bundle sizes across builds (JavaScript)
README
# webpack-stats-diff-plugin
Clear reporting of bundle sizes relative to the previous build or relative to an earlier build captured by a webpack stats file.
## Why is this useful?
Webpack prints absolute sizes of outputted files, but it's hard to see the overall impact of a code or configuration change. For example if you wanted to know the effect of changing webpack's `optimization.splitChunks.chunks` setting from its default `"async"` value to the recommended `"all"`,
Adding this plugin will highlight only the key changes:
![webpack-stats-diff-plugin comparison output](readme-assets/plugin-output.png)
Versus having to compare and contrast two standard webpack outputs:
![standard webpack report with chunks: async](readme-assets/standard-report-all.png)
![standard webpack report with chunks: all](readme-assets/standard-report-async.png)## Installation & Usage
```
npm install webpack-stats-diff-plugin --save-dev
```### Comparing to previous build output
Adding `new WebpackStatsDiffPlugin()` to the webpack plugins list will compare a new webpack build to the file sizes of the previous contents of the webpack output folder. Note, if `clean-webpack-plugin` is used it must be configured with `{beforeEmit: true}` for this plugin to be able to grab the previous build contents.
### Comparing to a webpack stats json file
This approach is helpful for comparing against an unchanging baseline build. To create a json stats file, add a script like `"build_stats": "webpack --profile --json > stats-master.json"` or use [webpack-stats-plugin](https://github.com/FormidableLabs/webpack-stats-plugin) with `opts.fields` containing `"assets"`. Then, add `new WebpackStatsDiffPlugin({oldStatsFile: 'path-to-stats-file.json'})` to the webpack plugins list to compare a new build against that baseline.
### Flexible opt-in webpack configuration
You likely don't want this relative size output all the time. The following configuration setup lets you pass environment variables to opt in to different plugin behaviors.
```javascript
const CleanWebpackPlugin = require('clean-webpack-plugin');
const WebpackStatsDiffPlugin = require('webpack-stats-diff-plugin');module.exports = {
output: {
path: BUILD_FOLDER
},
plugins: [
new CleanWebpackPlugin(BUILD_FOLDER, {beforeEmit: true}),
// ... other plugins
(process.env.COMPARE_PREVIOUS === 'true' || process.env.STATS_FILE) &&
new WebpackStatsDiffPlugin({
oldStatsFile: process.env.STATS_FILE
})
].filter(Boolean);
};
```With this setup, running
- `STATS_FILE=stats-master.json npm run build` compares the current build to the one used to create the stats file
- `COMPARE_PREVIOUS=true npm run build` compares the current build to the previous build folder contents### Configuration
The WebpackStatsDiffPlugin constructor can take in the following optional fields:
- `oldStatsFile`: A string file path to a webpack stats file. If provided, the current build will be compared to the build that created the stats file rather than having it compared to the previous output folder contents.
- `extensions`: An array of strings, optionally with a leading period. If provided, only files matching a given extension will be displayed and used for calculating totals. For example, `extensions: ['.js']` will only show size changes for built javascript files.
- `threshold`: Minimum percent difference to qualify a size change as significant. This prevents flooding the output with files that have only trivially changed their compiled output. Defaults to `5`. Can set to 0 to see all changed file sizes.
### Supported environments
This plugin should work for webpack versions >= 2, and Node.js versions >= 6.14.3
## Other Solutions
[GoogleChromeLabs/size-plugin](https://github.com/GoogleChromeLabs/size-plugin). Honestly if this had been created a month earlier, I might not have made this plugin 😅. If you want to compare against the previous build and prefer size-plugin's output format, I would recommend it over this plugin as the devs are looking into how to provide more in-depth size tracking and performance budgeting features.
At this point, I recommend my own plugin only if you need to compare against a stats file, which can be useful for seeing size changes relative to master or an earlier known state.