extract-loader

raw JSON →
5.1.0 verified Sat Apr 25 auth: no javascript maintenance

A webpack loader that evaluates source code on the fly and returns it as a string, primarily used to extract HTML and CSS from the bundle. Version 5.1.0 is the latest stable release, with slow updates since 2020. It resolves URLs within HTML and CSS, serving as a lean alternative to extract-text-webpack-plugin and mini-css-extract-plugin. It works specifically with code generated by html-loader or css-loader, providing a fake context for evaluation.

error Module build failed: Error: extract-loader can only be used after file-loader
cause Loader order is incorrect; file-loader must precede extract-loader.
fix
Reorder loaders: use ['file-loader', 'extract-loader', 'css-loader']
error Error: Cannot find module 'babel-loader'
cause extract-loader v5+ requires babel-loader to transpile ES modules.
fix
Install babel-loader: npm install --save-dev babel-loader
error TypeError: Cannot read properties of undefined (reading 'indexOf')
cause extract-loader encountered non-standard code (e.g., not from css/html-loader).
fix
Ensure the loaded module is CSS or HTML processed by respective loaders.
breaking v5.0.0 introduced Babel dependency for ES module support, requiring Node >= 6.0.0.
fix Ensure Node is 6+ and install babel-loader as a dependency.
deprecated extract-loader is in maintenance mode; consider using mini-css-extract-plugin for CSS extraction.
fix Switch to mini-css-extract-plugin (for CSS) or handle HTML extraction differently.
gotcha extract-loader only works with code from html-loader or css-loader; custom code may fail.
fix Ensure the loaded resource is processed by html-loader or css-loader before extraction.
gotcha The order of loaders matters: file-loader must come before extract-loader.
fix Use use: ['file-loader', 'extract-loader', ...] in webpack config.
deprecated Node 6 support removed in v4.0.0; v3.x supports Node 6.
fix Upgrade Node to 6+ or use v3.1.0.
npm install extract-loader
yarn add extract-loader
pnpm add extract-loader

Demonstrates using extract-loader with file-loader and css-loader to extract CSS as a separate file for production.

// webpack.config.js
module.exports = {
  entry: './src/main.css',
  module: {
    rules: [
      {
        test: /\.css$/,
        use: [
          'file-loader',
          'extract-loader',
          {
            loader: 'css-loader',
            options: { sourceMap: true }
          }
        ]
      }
    ]
  }
};

// In HTML, include generated CSS file
<link rel="stylesheet" href="<%= require('file-loader!extract-loader!css-loader!./main.css') %>">