Webpack Advanced

Advanced Webpack optimization techniques.

Tree Shaking

Remove unused exports
mode: production // enables tree shaking

package.json
"sideEffects": false
// or specify files with side effects
"sideEffects": ["*.css", "*.scss"]

Use ES6 imports
import { function1 } from ./utils;
// Not: const utils = require(./utils)

Minimize Bundle Size

Analyze bundle
npm install --save-dev webpack-bundle-analyzer

const BundleAnalyzerPlugin = require(webpack-bundle-analyzer).BundleAnalyzerPlugin;

plugins: [
  new BundleAnalyzerPlugin()
]

Minify
optimization: {
  minimize: true,
  minimizer: [new TerserPlugin()]
}

Caching Strategy

Runtime chunk
optimization: {
  runtimeChunk: single
}

Module IDs
optimization: {
  moduleIds: deterministic
}

Vendor chunk
splitChunks: {
  cacheGroups: {
    vendor: {
      test: /[\\/]node_modules[\\/]/,
      name: vendors,
      chunks: all
    }
  }
}

Compression

Gzip compression
const CompressionPlugin = require(compression-webpack-plugin);

plugins: [
  new CompressionPlugin({
    algorithm: gzip,
    test: /\.(js|css|html|svg)$/
  })
]

Brotli compression
new CompressionPlugin({
  algorithm: brotliCompress,
  filename: [path][base].br
})