SwcJsMinimizerRspackPlugin

Rspack only

此插件使用 SWC 来压缩 JavaScript 代码。

示例

通过 optimization.minimizer 使用此插件:

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

当设置了 optimization.minimizer 时,默认的压缩器会被禁用,因此我们需要同时添加 LightningCssMinimizerRspackPlugin 来压缩 CSS 文件。

选项

test

  • 类型: string | RegExp | Array<string | RegExp>
  • 默认值: undefined

指定需要被压缩的产物文件。可以使用正则表达式或者文件路径字符串,只有匹配的文件会被压缩。

例如,构建生成了 /dist/foo.[hash].js 和其他 JS 文件,我们仅对 foo.js 进行压缩:

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

include

  • 类型: string | RegExp | Array<string | RegExp>
  • 默认值: undefined

test 的作用一致,指定需要被压缩的产物文件。

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

exclude

  • 类型: string | RegExp | Array<string | RegExp>
  • 默认值: undefined

指定需要被排除的产物文件。可以使用正则表达式或者文件路径字符串,匹配的文件不会被压缩。

例如,构建生成了 /dist/foo.[hash].js 和其他 JS 文件,我们排除 foo.js 的压缩:

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

extractComments

  • 类型:
type ExtractCommentsOptions =
  | boolean
  | RegExp
  | {
      condition?: boolean | RegExp | undefined;
      banner?: string | boolean | undefined;
    };
  • 默认值: undefined

是否将注释提取到单独的文件中。如果原始文件名是 foo.js,则注释将提取到 foo.js.LICENSE.txt 文件中。

boolean

如果值为 true,等同于 /@preserve|@lic|@cc_on|^\**!/ 正则表达式,并移除其他的注释。

new rspack.SwcJsMinimizerRspackPlugin({
  extractComments: {
    condition: /@preserve|@lic|@cc_on|^\**!/,
  },
});

如果值为 false,则移除所有注释。

new rspack.SwcJsMinimizerRspackPlugin({
  extractComments: false,
});

RegExp

如果值为 RegExp,则将匹配的注释提取到单独的文件中。

new rspack.SwcJsMinimizerRspackPlugin({
  extractComments: /@preserve|@lic|@cc_on|^\**!/,
});

object

如果值为 object,则可以使用 conditionbanner 来自定义注释的提取。

new rspack.SwcJsMinimizerRspackPlugin({
  extractComments: {
    // 将匹配的注释提取到单独的文件中
    condition: /@preserve|@lic|@cc_on|^\**!/,
    // 在 `*.LICENSE.txt` 文件顶部的横幅
    // 如果为 `true`,则使用默认的横幅 `/*! For license information please see {relative} */`
    // 如果为 `false`,则不添加横幅
    // 如果为 `string`,则使用给定的横幅
    banner: true,
  },
});

minimizerOptions

  • 类型:
type MinimizerOptions = {
  minify?: boolean;
  module?: boolean;
  mangle?: TerserMangleOptions | boolean;
  compress?: TerserCompressOptions | boolean;
  format?: JsFormatOptions & ToSnakeCaseProperties<JsFormatOptions>;
};
  • 默认值:
const defaultOptions = {
  minify: true,
  mangle: true,
  compress: {
    passes: 1,
  }
  format: {
    comments: false,
  },
};

类似于 SWC 的 jsc.minify 选项,请参考 SWC - Minification 了解所有可用的选项。

例如,关闭 mangle 来避免对变量名进行混淆:

new rspack.SwcJsMinimizerRspackPlugin({
  minimizerOptions: {
    mangle: false,
  },
});