All Projects → ZachGawlik → webpack-stats-diff-plugin

ZachGawlik / webpack-stats-diff-plugin

Licence: MIT license
Webpack plugin for reporting changes in bundle sizes across builds

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to webpack-stats-diff-plugin

sitemap-webpack-plugin
Webpack plugin to generate a sitemap.
Stars: ✭ 72 (+14.29%)
Mutual labels:  webpack-plugin
webpack-demos
webpack小练习
Stars: ✭ 17 (-73.02%)
Mutual labels:  webpack-plugin
targets-webpack-plugin
Webpack plugin for transcompilig final bundles so they support legacy browsers
Stars: ✭ 15 (-76.19%)
Mutual labels:  webpack-plugin
eruda-webpack-plugin
A webpack plugin of eruda to help you develop mobile app
Stars: ✭ 56 (-11.11%)
Mutual labels:  webpack-plugin
del-webpack-plugin
A file plugin help you remove old files after webpack (v5) bundling
Stars: ✭ 43 (-31.75%)
Mutual labels:  webpack-plugin
mock-webpack-plugin
A webpack plugin that starts a json mock server
Stars: ✭ 21 (-66.67%)
Mutual labels:  webpack-plugin
webpack-bugsnag-plugins
Webpack plugins for common Bugsnag actions.
Stars: ✭ 29 (-53.97%)
Mutual labels:  webpack-plugin
webpack-alioss-upload-plugin
A flexible webpack plugin to upload files to aliyun oss, which supports multiple optional upload methods and parameters.
Stars: ✭ 14 (-77.78%)
Mutual labels:  webpack-plugin
crx-webpack-plugin
A webpack plugin to package chrome extensions (crx) post build
Stars: ✭ 21 (-66.67%)
Mutual labels:  webpack-plugin
bower-resolve-webpack-plugin
Offers an enhanced bower support for enhanced-resolve plugin.
Stars: ✭ 12 (-80.95%)
Mutual labels:  webpack-plugin
asset-map-webpack-plugin
Webpack plugin that creates a map of assets to public url slug for server agnostic usage.
Stars: ✭ 14 (-77.78%)
Mutual labels:  webpack-plugin
image-minimizer-webpack-plugin
Webpack loader and plugin to compress images using imagemin
Stars: ✭ 180 (+185.71%)
Mutual labels:  webpack-plugin
config-webpack-plugin
💫 Merge one or more configuration files together with environment variables too.
Stars: ✭ 18 (-71.43%)
Mutual labels:  webpack-plugin
webpack-omit-js-for-css-plugin
This plugin will omit bundled JS files for dependencies that are exclusively CSS, which become obsolete once mini-css-extract-plugin extracts inlined CSS into its own .css file
Stars: ✭ 14 (-77.78%)
Mutual labels:  webpack-plugin
chicio.github.io
👻 Fabrizio Duroni (me 😄) personal website. Created using GatsbyJS, Styled Components, Storybook, Typescript, tsParticles, GitHub pages, Github Actions, Upptime.
Stars: ✭ 20 (-68.25%)
Mutual labels:  webpack-plugin
webpack-extract-translation-keys
This plugin extracts translation keys for applications requiring runtime translations
Stars: ✭ 35 (-44.44%)
Mutual labels:  webpack-plugin
qn-webpack
Qiniu webpack plugin (七牛 Webpack 插件)
Stars: ✭ 39 (-38.1%)
Mutual labels:  webpack-plugin
loading-screen
🚥Loading screen for webpack plugin inspired by Nuxt.js's loading screen
Stars: ✭ 56 (-11.11%)
Mutual labels:  webpack-plugin
remove-files-webpack-plugin
A plugin for webpack that removes files and folders before and after compilation.
Stars: ✭ 48 (-23.81%)
Mutual labels:  webpack-plugin
warnings-to-errors-webpack-plugin
a webpack plugin that can recognize every warning as errors.
Stars: ✭ 17 (-73.02%)
Mutual labels:  webpack-plugin

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

Versus having to compare and contrast two standard webpack outputs:

standard webpack report with chunks: async standard webpack report with chunks: all

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 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.

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. 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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].