@taion/extract-text-webpack-plugin v2.0.0-beta.6-taion.1
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
npm install --save-dev extract-text-webpack-pluginor
yarn add --dev extract-text-webpack-pluginUsage 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"andcss-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: booleanextract from all additional chunks too (by default it extracts only from the initial chunk(s))options.disable: booleandisables the pluginoptions.id: stringUnique 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 moduleoptions.fallbackLoader: string | object | loader[]the loader(s) that should be used when the css is not extracted (i.e. in an additional chunk whenallChunks: false)options.publicPath: stringoverride thepublicPathsetting 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
]
};