Lesson 11 / 25

Images and assets

Handle images and fonts with Webpack 5 asset modules, choosing inline or emitted files by size to balance requests and caching.

Asset handling strategies

Webpack 5 has built-in asset type handling. Use 'asset' to automatically choose between inlining small files and emitting larger files. Small images are base64 encoded inline, reducing HTTP requests. Large images are emitted as separate files for efficient caching.

Configure asset handling

Set size thresholds for inline vs external assets.

module.exports = {
  module: {
    rules: [
      {
        test: /\.(png|jpg|gif)$/,
        type: 'asset',
        parser: {
          dataUrlCondition: {
            maxSize: 8 * 1024 // 8KB threshold
          }
        }
      }
    ]
  }
};

Output:

Images under 8KB are base64 inlined; larger images emitted as files

Image optimization matters

Use image-webpack-loader or equivalent to compress images before bundling. WebP and AVIF formats reduce size further. Lazy-load images below the fold. Responsive images using srcset provide appropriately sized images for different devices.

Quick check

Quick check: When should images be inlined?

  • All images should always be inlined.
  • Large images should be inlined for compression.
  • Never, because inlining breaks the build.
  • When the files are small, to save extra HTTP requests.
Answer

When the files are small, to save extra HTTP requests. — Small files are inlined as base64 to save HTTP requests. Large files stay separate for better caching.