Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork31
webpack/css-minimizer-webpack-plugin
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
This plugin usescssnano to optimize and minify your CSS.
It serves as a more accurate alternative tooptimize-css-assets-webpack-plugin, with better support for source maps, assets with query strings, caching, and parallel processing.
To begin, you'll need to installcss-minimizer-webpack-plugin:
npm install css-minimizer-webpack-plugin --save-devor
yarn add -D css-minimizer-webpack-pluginor
pnpm add -D css-minimizer-webpack-pluginThen add the plugin to yourwebpack configuration. For example:
webpack.config.js
constCssMinimizerPlugin=require("css-minimizer-webpack-plugin");constMiniCssExtractPlugin=require("mini-css-extract-plugin");module.exports={module:{rules:[{test:/\.s?css$/,use:[MiniCssExtractPlugin.loader,"css-loader","sass-loader"],},],},optimization:{minimizer:[// For webpack v5, you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line // `...`,newCssMinimizerPlugin(),],},plugins:[newMiniCssExtractPlugin()],};
Note
This enables CSS optimization only in production mode by default.
To enable it in development mode as well, set theoptimization.minimize option totrue:
webpack.config.js
// [...]module.exports={optimization:{// [...]minimize:true,},};
Finally, run Webpack using your preferred method.
This plugin works only withsource-map,inline-source-map,hidden-source-map andnosources-source-map values for thedevtool option.
Why? Because CSS support only these source map types.
The plugin respects thedevtool setting and uses theSourceMapDevToolPlugin internally.
Using a supporteddevtool value enables source map generation.
Enabling thecolumns option inSourceMapDevToolPlugin also allows source map generation.
Use source maps to map error message locations to their original modules (note that this may slow down compilation).
If you use your ownminify function please refer to theminify section for correct handling of source maps.
| Name | Type | Default | Description |
|---|---|---|---|
test | String|RegExp|Array<String|RegExp> | /\.css(\?.*)?$/i | Test to match files against. |
include | String|RegExp|Array<String|RegExp> | undefined | Files to include. |
exclude | String|RegExp|Array<String|RegExp> | undefined | Files to exclude. |
parallel | Boolean|Number | true | Enable or disable multi-process parallel running. |
minify | Function|Array<Function> | CssMinimizerPlugin.cssnanoMinify | Allows to override default minify function. |
minimizerOptions | Object|Array<Object> | { preset: 'default' } | Cssnano optimisationsoptions. |
warningsFilter | Function<(warning, file, source) -> Boolean> | () => true | Allows filtering of css-minimizer warnings. |
- Type:
String|RegExp|Array<String|RegExp> - Default:
/\.css(\?.*)?$/i
Test to match files against.
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({test:/\.foo\.css$/i,}),],},};
- Type:
String|RegExp|Array<String|RegExp> - Default:
undefined
Files to include.
webpack.config.js
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({include:/\/includes/,}),],},};
- Type:
String|RegExp|Array<String|RegExp> - Default:
undefined
Files to exclude.
webpack.config.js
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({exclude:/\/excludes/,}),],},};
- Type:
Boolean|Number - Default:
true
Use multi-process parallel running to improve the build speed.
The default number of concurrent runs:os.cpus().length - 1 oros.availableParallelism() - 1 (if this function is supported).
ℹ️ Parallelization can speed up your build significantly and is thereforehighly recommended.If a parallelization is enabled, the packages in
minimizerOptionsmust be required via strings (packageNameorrequire.resolve(packageName)). Read more inminimizerOptions
Enable or disable multi-process parallel running.
webpack.config.js
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({parallel:true,}),],},};
Enable multi-process parallel running and specify the number of concurrent runs.
webpack.config.js
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({parallel:4,}),],},};
- Type:
Function|Array<Function> - Default:
CssMinimizerPlugin.cssnanoMinify
Overrides the default minify function.
By default, plugin usescssnano package.
This is useful when using or testing unpublished versions or forks.
Possible options:
CssMinimizerPlugin.cssnanoMinifyCssMinimizerPlugin.cssoMinifyCssMinimizerPlugin.cleanCssMinifyCssMinimizerPlugin.esbuildMinifyCssMinimizerPlugin.lightningCssMinify(previouslyCssMinimizerPlugin.parcelCssMinify, the package was renamed, but we keep it for backward compatibility)async (data, inputMap, minimizerOptions) => {return {code: "a{color: red}", map: "...", warnings: [], errors: []}}
Warning
Always userequire insideminify function whenparallel option is enabled.
webpack.config.js
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minimizerOptions:{level:{1:{roundingPrecision:"all=3,px=5",},},},minify:CssMinimizerPlugin.cleanCssMinify,}),],},};
If an array of functions is passed to theminify option, theminimizerOptions must also be an array.
The function index in theminify array corresponds to the options object with the same index in theminimizerOptions array.
webpack.config.js
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minimizerOptions:[{},// Options for the first function (CssMinimizerPlugin.cssnanoMinify),{},// Options for the second function (CssMinimizerPlugin.cleanCssMinify),{},// Options for the third function],minify:[CssMinimizerPlugin.cssnanoMinify,CssMinimizerPlugin.cleanCssMinify,async(data,inputMap,minimizerOptions)=>// Custom minifier function({code:"a{color: red}",map:'{"version": "3", ...}',warnings:[],errors:[],}),],}),],},};
- Type:
Object|Array<Object> - Default:
{ preset: 'default' }
Cssnano optimisationsoptions.
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minimizerOptions:{preset:["default",{discardComments:{removeAll:true},},],},}),],},};
The function index in theminify array corresponds to the options object with the same index in theminimizerOptions array.
If you useminimizerOptions like object, allminify function accept it.
If parallelization is enabled, the packages in
minimizerOptionsmust be referenced via strings (packageNameorrequire.resolve(packageName)). In this case, we shouldn't userequire/import.
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minimizerOptions:{preset:require.resolve("cssnano-preset-simple"),},}),],},};
- Type:
Object - Default:
{ from: assetName }
Allows filtering optionsprocessoptions for the cssnano.
Theparser, stringifier andsyntax can be either a function or a string indicating the module that will be imported.
Warning
If any of these options are passed as a function, theparallel option must be disabled..
importsugarssfrom"sugarss";module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({parallel:false,minimizerOptions:{processorOptions:{parser:sugarss,},},}),],},};
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minimizerOptions:{processorOptions:{parser:"sugarss",},},}),],},};
- Type:
Function<(warning, file, source) -> Boolean> - Default:
() => true
Filter css-minimizer warnings (By defaultcssnano).
Returntrue to keep the warning, or a falsy value (false/null/undefined) to suppress it.
Warning
Thesource parameter will beundefined unless source maps are enabled.
webpack.config.js
module.exports={optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({warningsFilter:(warning,file,source)=>{if(/Droppingunreachablecode/i.test(warning)){returntrue;}if(/file\.css/i.test(file)){returntrue;}if(/source\.css/i.test(source)){returntrue;}returnfalse;},}),],},};
Don't forget to enablesourceMap options for all loaders.
constCssMinimizerPlugin=require("css-minimizer-webpack-plugin");module.exports={devtool:"source-map",module:{rules:[{test:/\.s?css$/,use:[MiniCssExtractPlugin.loader,{loader:"css-loader",options:{sourceMap:true}},{loader:"sass-loader",options:{sourceMap:true}},],},],},optimization:{minimizer:[newCssMinimizerPlugin()],},plugins:[newMiniCssExtractPlugin()],};
Remove all comments, including those starting with/*!.
module.exports={optimization:{minimizer:[newCssMinimizerPlugin({minimizerOptions:{preset:["default",{discardComments:{removeAll:true},},],},}),],},};
Using custom minifiercsso
webpack.config.js
module.exports={// Uncomment if you need source maps// devtool: "source-map",optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minify:CssMinimizerPlugin.cssoMinify,// Uncomment this line for options// minimizerOptions: { restructure: false },}),],},};
Using custom minifierclean-css
webpack.config.js
module.exports={// Uncomment if you need source maps// devtool: "source-map",optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minify:CssMinimizerPlugin.cleanCssMinify,// Uncomment this line for options// minimizerOptions: { compatibility: 'ie11,-properties.merging' },}),],},};
Using custom minifieresbuild
webpack.config.js
module.exports={// Uncomment if you need source maps// devtool: "source-map",optimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minify:CssMinimizerPlugin.esbuildMinify,}),],},};
Using custom minifierlightningcss, previously@parcel/css
webpack.config.js
module.exports={// devtool: "source-map", // Uncomment for source mapsoptimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minify:CssMinimizerPlugin.lightningCssMinify,// Uncomment this line for options// minimizerOptions: { targets: { ie: 11 }, drafts: { nesting: true }},}),],},};
Using custom minifierswc
webpack.config.js
module.exports={// devtool: "source-map", // Uncomment for source mapsoptimization:{minimize:true,minimizer:[newCssMinimizerPlugin({minify:CssMinimizerPlugin.swcMinify,// Uncomment this line for options// minimizerOptions: {},}),],},};
We welcome all contributions!
If you're new here, please take a moment to review our contributing guidelines.
About
cssnano plugin for Webpack
Resources
License
Code of conduct
Security policy
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
Packages0
Uh oh!
There was an error while loading.Please reload this page.