Extract text from bundle into a file.
JavaScript CSS HTML
Latest commit c8494f3 Jan 20, 2017 @bebraw bebraw committed on GitHub Merge pull request #335 from wtgtybhertgeghgtwtg/master
Drop `node@0.12.0` support.

README.md

extract text plugin for webpack 2

The API has changed since version 1. For the webpack 1 version, see the README in the webpack-1 branch.

Install

You can either install it with npm or yarn

npm install --save-dev extract-text-webpack-plugin

or

yarn add --dev extract-text-webpack-plugin

Usage example with css

var ExtractTextPlugin = require("extract-text-webpack-plugin");
module.exports = {
    module: {
        loaders: [
            { test: /\.css$/, loader: ExtractTextPlugin.extract({
                fallbackLoader: "style-loader",
                loader: "css-loader"
            }) }
        ]
    },
    plugins: [
        new ExtractTextPlugin("styles.css")
    ]
}

It moves every require("style.css") in entry chunks into a separate css output file. So your styles are no longer inlined into the javascript, but separate in a css bundle file (styles.css). If your total stylesheet volume is big, it will be faster because the stylesheet bundle is loaded in parallel to the javascript bundle.

Advantages:

  • Fewer style tags (older IE has a limit)
  • CSS SourceMap (with devtool: "source-map" and css-loader?sourceMap)
  • CSS requested in parallel
  • CSS cached separate
  • Faster runtime (less code and DOM operations)

Caveats:

  • Additional HTTP request
  • Longer compilation time
  • More complex configuration
  • No runtime public path modification
  • No Hot Module Replacement

API

new ExtractTextPlugin(options: filename | object)
  • options.filename: string (required) the filename of the result file. May contain [name], [id] and [contenthash]
    • [name] the name of the chunk
    • [id] the number of the chunk
    • [contenthash] a hash of the content of the extracted file
  • options.allChunks: boolean extract from all additional chunks too (by default it extracts only from the initial chunk(s))
  • options.disable: boolean disables the plugin
  • options.id: string Unique ident for this plugin instance. (For advanced usage only, by default automatically generated)

The ExtractTextPlugin generates an output file per entry, so you must use [name], [id] or [contenthash] when using multiple entries.

ExtractTextPlugin.extract(options: loader | object)

Creates an extracting loader from an existing loader. Supports loaders of type { loader: string; query: object }.

  • options.loader: string | object | loader[] (required) the loader(s) that should be used for converting the resource to a css exporting module
  • options.fallbackLoader: string | object | loader[] the loader(s) that should be used when the css is not extracted (i.e. in an additional chunk when allChunks: false)
  • options.publicPath: string override the publicPath setting for this loader

There is also an extract function on the instance. You should use this if you have more than one ExtractTextPlugin.

let ExtractTextPlugin = require('extract-text-webpack-plugin');

// multiple extract instances
let extractCSS = new ExtractTextPlugin('stylesheets/[name].css');
let extractLESS = new ExtractTextPlugin('stylesheets/[name].less');

module.exports = {
  ...
  module: {
    loaders: [
      { test: /\.scss$/i, loader: extractCSS.extract(['css-loader','sass-loader']) },
      { test: /\.less$/i, loader: extractLESS.extract(['css-loader','less-loader']) },
      ...
    ]
  },
  plugins: [
    extractCSS,
    extractLESS
  ]
};

License

MIT (http://www.opensource.org/licenses/mit-license.php)