589 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			589 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
<div align="center">
 | 
						||
  <a href="https://github.com/webpack/webpack">
 | 
						||
    <img width="200" height="200" src="https://webpack.js.org/assets/icon-square-big.svg">
 | 
						||
  </a>
 | 
						||
</div>
 | 
						||
 | 
						||
[![npm][npm]][npm-url]
 | 
						||
[![node][node]][node-url]
 | 
						||
[![deps][deps]][deps-url]
 | 
						||
[![tests][tests]][tests-url]
 | 
						||
[![cover][cover]][cover-url]
 | 
						||
[![chat][chat]][chat-url]
 | 
						||
[![size][size]][size-url]
 | 
						||
 | 
						||
# css-minimizer-webpack-plugin
 | 
						||
 | 
						||
This plugin uses [cssnano](https://cssnano.co) to optimize and minify your CSS.
 | 
						||
 | 
						||
Just like [optimize-css-assets-webpack-plugin](https://github.com/NMFR/optimize-css-assets-webpack-plugin) but more accurate with source maps and assets using query string, allows caching and works in parallel mode.
 | 
						||
 | 
						||
## Getting Started
 | 
						||
 | 
						||
To begin, you'll need to install `css-minimizer-webpack-plugin`:
 | 
						||
 | 
						||
```console
 | 
						||
$ npm install css-minimizer-webpack-plugin --save-dev
 | 
						||
```
 | 
						||
 | 
						||
Then add the plugin to your `webpack` configuration. For example:
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
 | 
						||
const CssMinimizerPlugin = require("css-minimizer-webpack-plugin");
 | 
						||
 | 
						||
module.exports = {
 | 
						||
  module: {
 | 
						||
    rules: [
 | 
						||
      {
 | 
						||
        test: /.s?css$/,
 | 
						||
        use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
 | 
						||
      },
 | 
						||
    ],
 | 
						||
  },
 | 
						||
  optimization: {
 | 
						||
    minimizer: [
 | 
						||
      // For webpack@5 you can use the `...` syntax to extend existing minimizers (i.e. `terser-webpack-plugin`), uncomment the next line
 | 
						||
      // `...`,
 | 
						||
      new CssMinimizerPlugin(),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
  plugins: [new MiniCssExtractPlugin()],
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
This will enable CSS optimization only in production mode.
 | 
						||
 | 
						||
If you want to run it also in development set the `optimization.minimize` option to `true`:
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
// [...]
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    // [...]
 | 
						||
    minimize: true,
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
And run `webpack` via your preferred method.
 | 
						||
 | 
						||
## Note about source maps
 | 
						||
 | 
						||
**Works only with `source-map`, `inline-source-map`, `hidden-source-map` and `nosources-source-map` values for the [`devtool`](https://webpack.js.org/configuration/devtool/) option.**
 | 
						||
 | 
						||
Why? Because CSS support only these source map types.
 | 
						||
 | 
						||
The plugin respect the [`devtool`](https://webpack.js.org/configuration/devtool/) and using the `SourceMapDevToolPlugin` plugin.
 | 
						||
Using supported `devtool` values enable source map generation.
 | 
						||
Using `SourceMapDevToolPlugin` with enabled the `columns` option enables source map generation.
 | 
						||
 | 
						||
Use source maps to map error message locations to modules (this slows down the compilation).
 | 
						||
If you use your own `minify` function please read the `minify` section for handling source maps correctly.
 | 
						||
 | 
						||
## Options
 | 
						||
 | 
						||
|                    Name                     |                      Type                      |              Default               | Description                                                             |
 | 
						||
| :-----------------------------------------: | :--------------------------------------------: | :--------------------------------: | :---------------------------------------------------------------------- |
 | 
						||
|             **[`test`](#test)**             |    `String\|RegExp\|Array<String\|RegExp>`     |         `/\.css(\?.*)?$/i`         | Test to match files against.                                            |
 | 
						||
|          **[`include`](#include)**          |    `String\|RegExp\|Array<String\|RegExp>`     |            `undefined`             | Files to include.                                                       |
 | 
						||
|          **[`exclude`](#exclude)**          |    `String\|RegExp\|Array<String\|RegExp>`     |            `undefined`             | Files to exclude.                                                       |
 | 
						||
|         **[`parallel`](#parallel)**         |               `Boolean\|Number`                |               `true`               | Enable/disable multi-process parallel running.                          |
 | 
						||
|           **[`minify`](#minify)**           |          `Function\|Array<Function>`           | `CssMinimizerPlugin.cssnanoMinify` | Allows to override default minify function.                             |
 | 
						||
| **[`minimizerOptions`](#minimizeroptions)** |            `Object\|Array<Object>`             |      `{ preset: 'default' }`       | Cssnano optimisations [options](https://cssnano.co/docs/optimisations). |
 | 
						||
|   **[`warningsFilter`](#warningsfilter)**   | `Function<(warning, file, source) -> Boolean>` |            `() => true`            | Allow to filter css-minimizer warnings.                                 |
 | 
						||
 | 
						||
### `test`
 | 
						||
 | 
						||
Type: `String|RegExp|Array<String|RegExp>` - default: `/\.css(\?.*)?$/i`
 | 
						||
 | 
						||
Test to match files against.
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        test: /\.foo\.css$/i,
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### `include`
 | 
						||
 | 
						||
Type: `String|RegExp|Array<String|RegExp>`
 | 
						||
Default: `undefined`
 | 
						||
 | 
						||
Files to include.
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        include: /\/includes/,
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### `exclude`
 | 
						||
 | 
						||
Type: `String|RegExp|Array<String|RegExp>`
 | 
						||
Default: `undefined`
 | 
						||
 | 
						||
Files to exclude.
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        exclude: /\/excludes/,
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### `parallel`
 | 
						||
 | 
						||
Type: `Boolean|Number`
 | 
						||
Default: `true`
 | 
						||
 | 
						||
Use multi-process parallel running to improve the build speed.
 | 
						||
Default number of concurrent runs: `os.cpus().length - 1`.
 | 
						||
 | 
						||
> ℹ️ Parallelization can speed up your build significantly and is therefore **highly recommended**.
 | 
						||
> If a parallelization is enabled, the packages in `minimizerOptions` must be required via strings (`packageName` or `require.resolve(packageName)`). Read more in [`minimizerOptions`](#minimizeroptions)
 | 
						||
 | 
						||
#### `Boolean`
 | 
						||
 | 
						||
Enable/disable multi-process parallel running.
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        parallel: true,
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
#### `Number`
 | 
						||
 | 
						||
Enable multi-process parallel running and set number of concurrent runs.
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        parallel: 4,
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### `minify`
 | 
						||
 | 
						||
Type: `Function|Array<Function>`
 | 
						||
Default: `CssMinimizerPlugin.cssnanoMinify`
 | 
						||
 | 
						||
Allows overriding default minify function.
 | 
						||
By default, plugin uses [cssnano](https://github.com/cssnano/cssnano) package.
 | 
						||
Useful for using and testing unpublished versions or forks.
 | 
						||
 | 
						||
Possible options:
 | 
						||
 | 
						||
- CssMinimizerPlugin.cssnanoMinify
 | 
						||
- CssMinimizerPlugin.cssoMinify
 | 
						||
- CssMinimizerPlugin.cleanCssMinify
 | 
						||
- CssMinimizerPlugin.esbuildMinify
 | 
						||
- CssMinimizerPlugin.parcelCssMinify
 | 
						||
- `async (data, inputMap, minimizerOptions) => {return {code: "a{color: red}", map: "...", warnings: [], errors: []}}`
 | 
						||
 | 
						||
> ⚠️ **Always use `require` inside `minify` function when `parallel` option enabled**.
 | 
						||
 | 
						||
#### `Function`
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minimizerOptions: {
 | 
						||
          level: {
 | 
						||
            1: {
 | 
						||
              roundingPrecision: "all=3,px=5",
 | 
						||
            },
 | 
						||
          },
 | 
						||
        },
 | 
						||
        minify: CssMinimizerPlugin.cleanCssMinify,
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
#### `Array`
 | 
						||
 | 
						||
If an array of functions is passed to the `minify` option, the `minimizerOptions` must also be an array.
 | 
						||
The function index in the `minify` array corresponds to the options object with the same index in the `minimizerOptions` array.
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        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) => {
 | 
						||
            // To do something
 | 
						||
            return {
 | 
						||
              code: `a{color: red}`,
 | 
						||
              map: `{"version": "3", ...}`,
 | 
						||
              warnings: [],
 | 
						||
              errors: [],
 | 
						||
            };
 | 
						||
          },
 | 
						||
        ],
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### `minimizerOptions`
 | 
						||
 | 
						||
Type: `Object|Array<Object>`
 | 
						||
Default: `{ preset: 'default' }`
 | 
						||
 | 
						||
Cssnano optimisations [options](https://cssnano.co/docs/optimisations).
 | 
						||
 | 
						||
#### `Object`
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minimizerOptions: {
 | 
						||
          preset: [
 | 
						||
            "default",
 | 
						||
            {
 | 
						||
              discardComments: { removeAll: true },
 | 
						||
            },
 | 
						||
          ],
 | 
						||
        },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
#### `Array`
 | 
						||
 | 
						||
The function index in the `minify` array corresponds to the options object with the same index in the `minimizerOptions` array.
 | 
						||
If you use `minimizerOptions` like object, all `minify` function accept it.
 | 
						||
 | 
						||
> If a parallelization is enabled, the packages in `minimizerOptions` must be required via strings (`packageName` or `require.resolve(packageName)`). In this case, we shouldn't use `require`/`import`.
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minimizerOptions: {
 | 
						||
          preset: require.resolve("cssnano-preset-simple"),
 | 
						||
        },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
##### `processorOptions` (⚠ only cssnano)
 | 
						||
 | 
						||
Type: `Object`
 | 
						||
Default: `{ from: assetName }`
 | 
						||
 | 
						||
Allows filtering options [`processoptions`](https://postcss.org/api/#processoptions) for the cssnano.
 | 
						||
The `parser`,` stringifier` and `syntax` can be either a function or a string indicating the module that will be imported.
 | 
						||
 | 
						||
> ⚠️ **If a function is passed, the `parallel` option must be disabled.**.
 | 
						||
 | 
						||
```js
 | 
						||
import sugarss from "sugarss";
 | 
						||
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        parallel: false,
 | 
						||
        minimizerOptions: {
 | 
						||
          processorOptions: {
 | 
						||
            parser: sugarss,
 | 
						||
          },
 | 
						||
        },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minimizerOptions: {
 | 
						||
          processorOptions: {
 | 
						||
            parser: "sugarss",
 | 
						||
          },
 | 
						||
        },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### `warningsFilter`
 | 
						||
 | 
						||
Type: `Function<(warning, file, source) -> Boolean>`
 | 
						||
Default: `() => true`
 | 
						||
 | 
						||
Allow filtering css-minimizer warnings (By default [cssnano](https://github.com/cssnano/cssnano)).
 | 
						||
Return `true` to keep the warning, a falsy value (`false`/`null`/`undefined`) otherwise.
 | 
						||
 | 
						||
> ⚠️ The `source` argument will contain `undefined` if you don't use source maps.
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        warningsFilter: (warning, file, source) => {
 | 
						||
          if (/Dropping unreachable code/i.test(warning)) {
 | 
						||
            return true;
 | 
						||
          }
 | 
						||
 | 
						||
          if (/file\.css/i.test(file)) {
 | 
						||
            return true;
 | 
						||
          }
 | 
						||
 | 
						||
          if (/source\.css/i.test(source)) {
 | 
						||
            return true;
 | 
						||
          }
 | 
						||
 | 
						||
          return false;
 | 
						||
        },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
## Examples
 | 
						||
 | 
						||
### Use sourcemaps
 | 
						||
 | 
						||
Don't forget to enable `sourceMap` options for all loaders.
 | 
						||
 | 
						||
```js
 | 
						||
const CssMinimizerPlugin = 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: [new CssMinimizerPlugin()],
 | 
						||
  },
 | 
						||
  plugins: [new MiniCssExtractPlugin()],
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### Remove all comments
 | 
						||
 | 
						||
Remove all comments (including comments starting with `/*!`).
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  optimization: {
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minimizerOptions: {
 | 
						||
          preset: [
 | 
						||
            "default",
 | 
						||
            {
 | 
						||
              discardComments: { removeAll: true },
 | 
						||
            },
 | 
						||
          ],
 | 
						||
        },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### Using custom minifier [csso](https://github.com/css/csso)
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  // Uncomment if you need source maps
 | 
						||
  // devtool: "source-map",
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minify: CssMinimizerPlugin.cssoMinify,
 | 
						||
        // Uncomment this line for options
 | 
						||
        // minimizerOptions: { restructure: false },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### Using custom minifier [clean-css](https://github.com/jakubpawlowicz/clean-css)
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  // Uncomment if you need source maps
 | 
						||
  // devtool: "source-map",
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minify: CssMinimizerPlugin.cleanCssMinify,
 | 
						||
        // Uncomment this line for options
 | 
						||
        // minimizerOptions: { compatibility: 'ie11,-properties.merging' },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### Using custom minifier [esbuild](https://github.com/evanw/esbuild)
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  // Uncomment if you need source maps
 | 
						||
  // devtool: "source-map",
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minify: CssMinimizerPlugin.esbuildMinify,
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
### Using custom minifier [@parcel/css](https://github.com/parcel-bundler/parcel-css)
 | 
						||
 | 
						||
**webpack.config.js**
 | 
						||
 | 
						||
```js
 | 
						||
module.exports = {
 | 
						||
  // Uncomment if you need source maps
 | 
						||
  // devtool: "source-map",
 | 
						||
  optimization: {
 | 
						||
    minimize: true,
 | 
						||
    minimizer: [
 | 
						||
      new CssMinimizerPlugin({
 | 
						||
        minify: CssMinimizerPlugin.parcelCssMinify,
 | 
						||
        // Uncomment this line for options
 | 
						||
        // minimizerOptions: { targets: { ie: 11 }, drafts: { nesting: true } },
 | 
						||
      }),
 | 
						||
    ],
 | 
						||
  },
 | 
						||
};
 | 
						||
```
 | 
						||
 | 
						||
## Contributing
 | 
						||
 | 
						||
Please take a moment to read our contributing guidelines if you haven't yet done so.
 | 
						||
 | 
						||
[CONTRIBUTING](./.github/CONTRIBUTING.md)
 | 
						||
 | 
						||
## License
 | 
						||
 | 
						||
[MIT](./LICENSE)
 | 
						||
 | 
						||
[npm]: https://img.shields.io/npm/v/css-minimizer-webpack-plugin.svg
 | 
						||
[npm-url]: https://npmjs.com/package/css-minimizer-webpack-plugin
 | 
						||
[node]: https://img.shields.io/node/v/css-minimizer-webpack-plugin.svg
 | 
						||
[node-url]: https://nodejs.org
 | 
						||
[deps]: https://david-dm.org/webpack-contrib/css-minimizer-webpack-plugin.svg
 | 
						||
[deps-url]: https://david-dm.org/webpack-contrib/css-minimizer-webpack-plugin
 | 
						||
[tests]: https://github.com/webpack-contrib/css-minimizer-webpack-plugin/workflows/css-minimizer-webpack-plugin/badge.svg
 | 
						||
[tests-url]: https://github.com/webpack-contrib/css-minimizer-webpack-plugin/actions
 | 
						||
[cover]: https://codecov.io/gh/webpack-contrib/css-minimizer-webpack-plugin/branch/master/graph/badge.svg
 | 
						||
[cover-url]: https://codecov.io/gh/webpack-contrib/css-minimizer-webpack-plugin
 | 
						||
[chat]: https://img.shields.io/badge/gitter-webpack%2Fwebpack-brightgreen.svg
 | 
						||
[chat-url]: https://gitter.im/webpack/webpack
 | 
						||
[size]: https://packagephobia.now.sh/badge?p=css-minimizer-webpack-plugin
 | 
						||
[size-url]: https://packagephobia.now.sh/result?p=css-minimizer-webpack-plugin
 |