このプラグインは、CSSを最適化および最小化するためにcssnanoを使用しています。
optimize-css-assets-webpack-pluginと同様ですが、ソースマップやクエリ文字列を使用するアセットでより正確であり、キャッシュを許可し、並列モードで動作します。
まず、css-minimizer-webpack-plugin
をインストールする必要があります。
npm install css-minimizer-webpack-plugin --save-dev
または
yarn add -D css-minimizer-webpack-plugin
または
pnpm add -D css-minimizer-webpack-plugin
次に、プラグインをwebpack
の設定に追加します。例えば
webpack.config.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()],
};
これにより、本番モードでのみCSSの最適化が有効になります。
開発環境でも実行する場合は、optimization.minimize
オプションをtrue
に設定します。
webpack.config.js
// [...]
module.exports = {
optimization: {
// [...]
minimize: true,
},
};
そして、好みの方法でwebpack
を実行します。
devtool
オプションの値には、source-map
、inline-source-map
、hidden-source-map
、nosources-source-map
でのみ動作します。
なぜでしょうか? CSSはこれらのソースマップタイプのみをサポートしているからです。
このプラグインは、devtool
を尊重し、SourceMapDevToolPlugin
プラグインを使用しています。サポートされているdevtool
値を使用すると、ソースマップの生成が有効になります。columns
オプションを有効にしたSourceMapDevToolPlugin
を使用すると、ソースマップの生成が有効になります。
エラーメッセージの位置をモジュールにマッピングするためにソースマップを使用します(これにより、コンパイルが遅くなります)。独自のminify
関数を使用する場合は、ソースマップを正しく処理するためにminify
セクションを読んでください。
名前 | タイプ | デフォルト | 説明 |
---|---|---|---|
test | String|RegExp|Array<String|RegExp> | /\.css(\?.*)?$/i | ファイルと一致させるためのテスト。 |
include | String|RegExp|Array<String|RegExp> | 未定義 | 含めるファイル。 |
exclude | String|RegExp|Array<String|RegExp> | 未定義 | 除外するファイル。 |
parallel | Boolean|Number | true | マルチプロセス並列実行を有効/無効にします。 |
minify | 関数|関数型の配列 | CssMinimizerPlugin.cssnanoMinify | デフォルトのminify関数をオーバーライドできます。 |
minimizerOptions | オブジェクト|オブジェクト型の配列 | { preset: 'default' } | Cssnanoの最適化オプション。 |
warningsFilter | 関数<(warning, file, source) -> Boolean> | () => true | css-minimizerの警告をフィルタリングできます。 |
test
型: String|RegExp|Array<String|RegExp>
- デフォルト: /\.css(\?.*)?$/i
ファイルと一致させるためのテスト。
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
test: /\.foo\.css$/i,
}),
],
},
};
include
型: String|RegExp|Array<String|RegExp>
デフォルト: undefined
含めるファイル。
webpack.config.js
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
include: /\/includes/,
}),
],
},
};
exclude
型: String|RegExp|Array<String|RegExp>
デフォルト: undefined
除外するファイル。
webpack.config.js
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
exclude: /\/excludes/,
}),
],
},
};
parallel
型: Boolean|Number
デフォルト: true
ビルド速度を向上させるために、マルチプロセス並列実行を使用します。デフォルトの同時実行数: os.cpus().length - 1
。
ℹ️ 並列化はビルドを大幅に高速化できるため、**強く推奨**されます。並列化が有効になっている場合、
minimizerOptions
内のパッケージは文字列(packageName
またはrequire.resolve(packageName)
)経由でrequireされる必要があります。詳細については、minimizerOptions
を参照してください。
Boolean
マルチプロセス並列実行を有効/無効にします。
webpack.config.js
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
parallel: true,
}),
],
},
};
Number
マルチプロセス並列実行を有効にし、同時実行数を設定します。
webpack.config.js
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
parallel: 4,
}),
],
},
};
minify
型: Function|Array<Function>
デフォルト: CssMinimizerPlugin.cssnanoMinify
デフォルトのminify関数をオーバーライドできます。デフォルトでは、プラグインはcssnanoパッケージを使用します。未公開バージョンやフォークを使用およびテストする場合に役立ちます。
可能なオプション
CssMinimizerPlugin.cssnanoMinify
CssMinimizerPlugin.cssoMinify
CssMinimizerPlugin.cleanCssMinify
CssMinimizerPlugin.esbuildMinify
CssMinimizerPlugin.lightningCssMinify
(以前はCssMinimizerPlugin.parcelCssMinify
。パッケージがリネームされましたが、後方互換性のために残しています)async (data, inputMap, minimizerOptions) => {return {code: "a{color: red}", map: "...", warnings: [], errors: []}}
警告
parallel
オプションが有効な場合は、minify
関数内で常にrequire
を使用してください.
Function
webpack.config.js
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minimizerOptions: {
level: {
1: {
roundingPrecision: "all=3,px=5",
},
},
},
minify: CssMinimizerPlugin.cleanCssMinify,
}),
],
},
};
Array
関数の配列がminify
オプションに渡された場合、minimizerOptions
も配列である必要があります。minify
配列内の関数のインデックスは、minimizerOptions
配列内の同じインデックスのオプションオブジェクトに対応します。
webpack.config.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
型: Object|Array<Object>
デフォルト: { preset: 'default' }
Cssnanoの最適化オプション。
Object
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minimizerOptions: {
preset: [
"default",
{
discardComments: { removeAll: true },
},
],
},
}),
],
},
};
Array
minify
配列内の関数のインデックスは、minimizerOptions
配列内の同じインデックスのオプションオブジェクトに対応します。minimizerOptions
をオブジェクトとして使用する場合、すべてのminify
関数がそれを受け入れます。
並列化が有効になっている場合、
minimizerOptions
内のパッケージは文字列(packageName
またはrequire.resolve(packageName)
)経由でrequireされる必要があります。この場合、require
/import
を使用しないでください。
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minimizerOptions: {
preset: require.resolve("cssnano-preset-simple"),
},
}),
],
},
};
processorOptions
(⚠ cssnanoのみ)型: Object
デフォルト: { from: assetName }
cssnanoのprocessoptions
のオプションをフィルタリングできます。parser
、stringifier
、およびsyntax
は、関数またはインポートされるモジュールを示す文字列のいずれかになります。
警告
関数が渡された場合、
parallel
オプションは無効にする必要があります。.
import sugarss from "sugarss";
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
parallel: false,
minimizerOptions: {
processorOptions: {
parser: sugarss,
},
},
}),
],
},
};
module.exports = {
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minimizerOptions: {
processorOptions: {
parser: "sugarss",
},
},
}),
],
},
};
warningsFilter
型: Function<(warning, file, source) -> Boolean>
デフォルト: () => true
css-minimizerの警告をフィルタリングできます(デフォルトはcssnano)。警告を保持する場合はtrue
を返し、それ以外の場合は偽の値(false
/null
/undefined
)を返します。
警告
ソースマップを使用しない場合、
source
引数にはundefined
が含まれます。
webpack.config.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;
},
}),
],
},
};
すべてのローダーでsourceMap
オプションを有効にすることを忘れないでください。
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()],
};
すべてのコメント(/*!
で始まるコメントを含む)を削除します。
module.exports = {
optimization: {
minimizer: [
new CssMinimizerPlugin({
minimizerOptions: {
preset: [
"default",
{
discardComments: { removeAll: true },
},
],
},
}),
],
},
};
webpack.config.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 },
}),
],
},
};
webpack.config.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' },
}),
],
},
};
webpack.config.js
module.exports = {
// Uncomment if you need source maps
// devtool: "source-map",
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minify: CssMinimizerPlugin.esbuildMinify,
}),
],
},
};
@parcel/css
)webpack.config.js
module.exports = {
// Uncomment if you need source maps
// devtool: "source-map",
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minify: CssMinimizerPlugin.lightningCssMinify,
// Uncomment this line for options
// minimizerOptions: { targets: { ie: 11 }, drafts: { nesting: true } },
}),
],
},
};
webpack.config.js
module.exports = {
// Uncomment if you need source maps
// devtool: "source-map",
optimization: {
minimize: true,
minimizer: [
new CssMinimizerPlugin({
minify: CssMinimizerPlugin.swcMinify,
// Uncomment this line for options
// minimizerOptions: {},
}),
],
},
};
まだ読んでいない場合は、貢献ガイドラインを読む時間を取ってください。