This plugin is used to minify JavaScript files using SWC.
Use this plugin via optimization.minimizer:
import { rspack } from '@rspack/core';
export default {
// ...
optimization: {
minimizer: [
new rspack.SwcJsMinimizerRspackPlugin({
// options
}),
new rspack.LightningCssMinimizerRspackPlugin(),
],
},
};
When optimization.minimizer is set, the default minimizers are disabled, so we need to add LightningCssMinimizerRspackPlugin to minify CSS files.
string | RegExp | Array<string | RegExp>\.[cm]?js(\?.*)?$Specify the files to be minimized. You can use regular expressions or file path strings, and only the files that match will be minimized.
For example, the build generates /dist/foo.[hash].js and some other JS files, we only minify foo.js:
new rspack.SwcJsMinimizerRspackPlugin({
test: /dist\/foo\.\w+\.js$/,
});string | RegExp | Array<string | RegExp>undefinedSame as test, specify the files to be minimized.
new rspack.SwcJsMinimizerRspackPlugin({
include: /dist\/foo\.\w+\.js$/,
});string | RegExp | Array<string | RegExp>undefinedSpecify the files to be excluded. You can use regular expressions or file path strings, and the files that match will not be minimized.
For example, the build generates /dist/foo.[hash].js and some other JS files, we exclude the minimization of foo.js:
new rspack.SwcJsMinimizerRspackPlugin({
exclude: /dist\/foo\.\w+\.js$/,
});type ExtractCommentsOptions =
| boolean
| RegExp
| {
condition?: boolean | RegExp | undefined;
banner?: string | boolean | undefined;
};undefinedWhether comments shall be extracted to a separate file. If the original file is named foo.js, then the comments will be stored to foo.js.LICENSE.txt.
If value is true, it is equivalent to /@preserve|@lic|@cc_on|^\**!/ regexp condition and remove remaining comments.
new rspack.SwcJsMinimizerRspackPlugin({
extractComments: {
condition: /@preserve|@lic|@cc_on|^\**!/,
},
});If value is false, all comments will be removed.
new rspack.SwcJsMinimizerRspackPlugin({
extractComments: false,
});If value is RegExp, all comments that match the given expression will be extracted to the separate file.
new rspack.SwcJsMinimizerRspackPlugin({
extractComments: /@preserve|@lic|@cc_on|^\**!/,
});If value is object, it can use condition and banner to customize the extraction.
new rspack.SwcJsMinimizerRspackPlugin({
extractComments: {
// add comments that match the condition will be extracted
condition: /@preserve|@lic|@cc_on|^\**!/,
// add banner to the top of the `*.LICENSE.txt` file
// If `true`, use the default banner `/*! For license information please see {relative} */`
// If `false`, no banner will be added
// If `string`, use the given banner
banner: true,
},
});type MinimizerOptions = {
minify?: boolean;
module?: boolean;
ecma?: 5 | 2015 | 2016 | string | number;
mangle?: TerserMangleOptions | boolean;
compress?: TerserCompressOptions | boolean;
format?: JsFormatOptions & ToSnakeCaseProperties<JsFormatOptions>;
};const defaultOptions = {
minify: true,
mangle: true,
ecma: 5,
compress: {
passes: 2,
}
format: {
comments: false,
},
};Similar to the jsc.minify option of SWC, please refer to SWC - Minification for all available options.
For example, disable mangle to avoid mangling variable names:
new rspack.SwcJsMinimizerRspackPlugin({
minimizerOptions: {
mangle: false,
},
});For example, set a higher passes to run more compression passes. In some cases this may result in a smaller bundle size, but the more passes that are run, the more time it takes to compress.
new rspack.SwcJsMinimizerRspackPlugin({
minimizerOptions: {
compress: {
passes: 4,
},
},
});