SwcJsMinimizerRspackPlugin

Rspack only

This plugin is used to minify JavaScript files using SWC.

Example

Use this plugin via optimization.minimizer:

module.exports = {
  // ...
  optimization: {
    minimizer: [
      new rspack.SwcJsMinimizerRspackPlugin({
        // options
      }),
      new rspack.LightningCssMinimizerRspackPlugin(),
    ],
  },
};
TIP

When optimization.minimizer is set, the default minimizers are disabled, so we need to add LightningCssMinimizerRspackPlugin to minify CSS files.

Options

test

  • Type: string | RegExp | Array<string | RegExp>
  • Default: undefined

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$/,
});

include

  • Type: string | RegExp | Array<string | RegExp>
  • Default: undefined

Same as test, specify the files to be minimized.

new rspack.SwcJsMinimizerRspackPlugin({
  include: /dist\/foo\.\w+\.js$/,
});

exclude

  • Type: string | RegExp | Array<string | RegExp>
  • Default: undefined

Specify 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$/,
});

extractComments

  • Type:
type ExtractCommentsOptions =
  | boolean
  | RegExp
  | {
      condition?: boolean | RegExp | undefined;
      banner?: string | boolean | undefined;
    };
  • Default: undefined

Whether 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.

boolean

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,
});

RegExp

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|^\**!/,
});

object

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,
  },
});

minimizerOptions

  • Type:
type MinimizerOptions = {
  minify?: boolean;
  module?: boolean;
  mangle?: TerserMangleOptions | boolean;
  compress?: TerserCompressOptions | boolean;
  format?: JsFormatOptions & ToSnakeCaseProperties<JsFormatOptions>;
};
  • Default:
const defaultOptions = {
  minify: true,
  mangle: true,
  compress: {
    passes: 1,
  }
  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,
  },
});