An Rsbuild plugin to customize CSS minification, allowing you to choose between cssnano (JavaScript-based) or Lightning CSS (Rust-based) for high-performance CSS compression.
26
stars
11
commits
TypeScript
primary language
May 4, 2025
updated
An Rsbuild plugin to customize CSS minification, allowing you to choose between cssnano (JavaScript-based) or Lightning CSS (Rust-based) for high-performance CSS compression.
rsbuild-plugin-css-optimizer internally integrates css-minimizer-webpack-plugin to optimize CSS assets in production builds.
cssnano for extensive optimizations or Lightning CSS for 5-10x faster minification.Lightning CSS’s Rust-based engine for parallel processing and native performance.minify.css is enabled.cssnano and Lightning CSS settings for browser targeting, CSS features, and more.Install the plugin and its dependency:
npm add rsbuild-plugin-css-optimizer -D
bun add -d rsbuild-plugin-css-optimizer
Add the pluginCssMinimizer to your Rsbuild configuration in rsbuild.config.ts. The plugin enables CSS minification in production builds when output.minify.css is true.
// rsbuild.config.ts
import { pluginCssMinimizer } from "rsbuild-plugin-css-optimizer";
export default {
plugins: [
pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: {
minimizerOptions: {
targets: ["> 0.25%", "not dead"],
},
},
}),
],
};
// rsbuild.config.ts
import { pluginCssMinimizer } from "rsbuild-plugin-css-optimizer";
export default {
plugins: [
pluginCssMinimizer(), // Uses cssnano by default
],
};
The plugin accepts a PluginCssMinimizerOptions object with the following properties:
minifier'cssnano' | 'lightningcss''cssnano''cssnano': JavaScript-based minifier with a wide range of optimizations.'lightningcss': Rust-based minifier for significantly faster performance.pluginCssMinimizer({
minifier: "lightningcss",
});
cssnanoOptionsConfigChain<CssMinimizerPlugin.BasePluginOptions & CssMinimizerPlugin.DefinedDefaultMinimizerAndOptions<CssNanoOptions>> | Function{
minify: CssMinimizerWebpackPlugin.cssnanoMinify,
minimizerOptions: {
preset: ['default', { mergeLonghand: false }],
},
}
cssnano, applied when minifier is 'cssnano'. Can be an object merged with defaults or a function to modify options. See cssnano documentation for all available options.configFile (string, optional): Path to a cssnano configuration file.preset (string | [string, object], optional): Preset name and configuration (e.g., ['default', { mergeLonghand: false }]).pluginCssMinimizer({
minifier: "cssnano",
cssnanoOptions: {
minimizerOptions: {
preset: ["advanced", { discardComments: { removeAll: true } }],
},
},
});
pluginCssMinimizer({
minifier: "cssnano",
cssnanoOptions: (options) => {
options.minimizerOptions = {
preset: require.resolve("cssnano-preset-simple"),
};
return options;
},
});
lightningCssOptionsConfigChain<CssMinimizerPlugin.BasePluginOptions & CssMinimizerPlugin.DefinedDefaultMinimizerAndOptions<LightningCssOptions>> | Function{
minify: CssMinimizerWebpackPlugin.lightningCssMinify,
minimizerOptions: {
targets: 'defaults',
},
}
Lightning CSS, applied when minifier is 'lightningcss'. Can be an object merged with defaults or a function to modify options. See Lightning CSS documentation for all available options.targets (string | string[] | { [key: string]: number }, optional): Browser targets using browserslist syntax (e.g., ['> 0.25%', 'not dead']) or version objects (e.g., { chrome: 80 }).drafts (object, optional): Enable draft CSS features, such as { nesting: true }.pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: {
minimizerOptions: {
targets: ["chrome >= 80", "firefox >= 78"],
drafts: { nesting: true },
},
},
});
pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: (options) => {
options.minimizerOptions.targets = ["> 0.5%"];
return options;
},
});
// rsbuild.config.ts
import { pluginCssMinimizer } from "rsbuild-plugin-css-optimizer";
export default {
output: {
minify: {
css: true, // Enable CSS minification
},
},
plugins: [
pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: {
minimizerOptions: {
targets: ["> 0.25%", "not dead"],
drafts: { nesting: true },
},
},
}),
// Alternatively, use cssnano
pluginCssMinimizer({
minifier: "cssnano",
cssnanoOptions: {
minimizerOptions: {
preset: ["default", { discardComments: { removeAll: true } }],
},
},
}),
],
};
cssnano due to Rust’s compiled performance and parallel processing.devtool: 'source-map' for both minifiers.Lightning CSS, use browserslist syntax (e.g., ['> 0.25%']) or version objects (e.g., { chrome: 80 }). The default ('defaults') targets modern browsers.mergeLonghand: false default prevents issues with properties like safe-area-inset-top (see cssnano issue #803).isProd is true and minify.css is enabled.output.minify.css is true or minify is true in your Rsbuild config.isProd: true).cssnanoOptions or lightningCssOptions.Contributions are welcome! Please submit issues or pull requests to the plugin repository.
TypeScript
92.7%
CSS
5.0%
JavaScript
2.3%
An Rsbuild plugin to customize CSS minification, allowing you to choose between cssnano (JavaScript-based) or Lightning CSS (Rust-based) for high-performance CSS compression.
26
stars
11
commits
TypeScript
primary language
May 4, 2025
updated
An Rsbuild plugin to customize CSS minification, allowing you to choose between cssnano (JavaScript-based) or Lightning CSS (Rust-based) for high-performance CSS compression.
rsbuild-plugin-css-optimizer internally integrates css-minimizer-webpack-plugin to optimize CSS assets in production builds.
cssnano for extensive optimizations or Lightning CSS for 5-10x faster minification.Lightning CSS’s Rust-based engine for parallel processing and native performance.minify.css is enabled.cssnano and Lightning CSS settings for browser targeting, CSS features, and more.Install the plugin and its dependency:
npm add rsbuild-plugin-css-optimizer -D
bun add -d rsbuild-plugin-css-optimizer
Add the pluginCssMinimizer to your Rsbuild configuration in rsbuild.config.ts. The plugin enables CSS minification in production builds when output.minify.css is true.
// rsbuild.config.ts
import { pluginCssMinimizer } from "rsbuild-plugin-css-optimizer";
export default {
plugins: [
pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: {
minimizerOptions: {
targets: ["> 0.25%", "not dead"],
},
},
}),
],
};
// rsbuild.config.ts
import { pluginCssMinimizer } from "rsbuild-plugin-css-optimizer";
export default {
plugins: [
pluginCssMinimizer(), // Uses cssnano by default
],
};
The plugin accepts a PluginCssMinimizerOptions object with the following properties:
minifier'cssnano' | 'lightningcss''cssnano''cssnano': JavaScript-based minifier with a wide range of optimizations.'lightningcss': Rust-based minifier for significantly faster performance.pluginCssMinimizer({
minifier: "lightningcss",
});
cssnanoOptionsConfigChain<CssMinimizerPlugin.BasePluginOptions & CssMinimizerPlugin.DefinedDefaultMinimizerAndOptions<CssNanoOptions>> | Function{
minify: CssMinimizerWebpackPlugin.cssnanoMinify,
minimizerOptions: {
preset: ['default', { mergeLonghand: false }],
},
}
cssnano, applied when minifier is 'cssnano'. Can be an object merged with defaults or a function to modify options. See cssnano documentation for all available options.configFile (string, optional): Path to a cssnano configuration file.preset (string | [string, object], optional): Preset name and configuration (e.g., ['default', { mergeLonghand: false }]).pluginCssMinimizer({
minifier: "cssnano",
cssnanoOptions: {
minimizerOptions: {
preset: ["advanced", { discardComments: { removeAll: true } }],
},
},
});
pluginCssMinimizer({
minifier: "cssnano",
cssnanoOptions: (options) => {
options.minimizerOptions = {
preset: require.resolve("cssnano-preset-simple"),
};
return options;
},
});
lightningCssOptionsConfigChain<CssMinimizerPlugin.BasePluginOptions & CssMinimizerPlugin.DefinedDefaultMinimizerAndOptions<LightningCssOptions>> | Function{
minify: CssMinimizerWebpackPlugin.lightningCssMinify,
minimizerOptions: {
targets: 'defaults',
},
}
Lightning CSS, applied when minifier is 'lightningcss'. Can be an object merged with defaults or a function to modify options. See Lightning CSS documentation for all available options.targets (string | string[] | { [key: string]: number }, optional): Browser targets using browserslist syntax (e.g., ['> 0.25%', 'not dead']) or version objects (e.g., { chrome: 80 }).drafts (object, optional): Enable draft CSS features, such as { nesting: true }.pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: {
minimizerOptions: {
targets: ["chrome >= 80", "firefox >= 78"],
drafts: { nesting: true },
},
},
});
pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: (options) => {
options.minimizerOptions.targets = ["> 0.5%"];
return options;
},
});
// rsbuild.config.ts
import { pluginCssMinimizer } from "rsbuild-plugin-css-optimizer";
export default {
output: {
minify: {
css: true, // Enable CSS minification
},
},
plugins: [
pluginCssMinimizer({
minifier: "lightningcss",
lightningCssOptions: {
minimizerOptions: {
targets: ["> 0.25%", "not dead"],
drafts: { nesting: true },
},
},
}),
// Alternatively, use cssnano
pluginCssMinimizer({
minifier: "cssnano",
cssnanoOptions: {
minimizerOptions: {
preset: ["default", { discardComments: { removeAll: true } }],
},
},
}),
],
};
cssnano due to Rust’s compiled performance and parallel processing.devtool: 'source-map' for both minifiers.Lightning CSS, use browserslist syntax (e.g., ['> 0.25%']) or version objects (e.g., { chrome: 80 }). The default ('defaults') targets modern browsers.mergeLonghand: false default prevents issues with properties like safe-area-inset-top (see cssnano issue #803).isProd is true and minify.css is enabled.output.minify.css is true or minify is true in your Rsbuild config.isProd: true).cssnanoOptions or lightningCssOptions.Contributions are welcome! Please submit issues or pull requests to the plugin repository.
TypeScript
92.7%
CSS
5.0%
JavaScript
2.3%