代码压缩
从 v1.2.67 开始,您可以通过在您的 .swcrc 文件中启用 minify 来配置 SWC 以压缩您的代码。
{
  // Enable minification
  "minify": true,
  // Optional, configure minification options
  "jsc": {
    "minify": {
      "compress": {
        "unused": true
      },
      "mangle": true
    }
  }
}配置
关于注释的说明
如果您将 jsc.minify.compress 设置为 true 或 {},SWC 将只保留许可证注释。如果您不希望这样,请修改 jsc.minify.format。
jsc.minify.compress
类型:boolean | object。
类似于 compress 选项 (在新标签页中打开) 的 terser。
{
  "jsc": {
    "minify": {
      "compress": true // equivalent to {}
    }
  }
}- arguments,默认值为- false。
- arrows,默认值为- true。
- booleans,默认值为- true。
- booleans_as_integers,默认值为- false。
- collapse_vars,默认值为- true。
- comparisons,默认值为- true。
- computed_props,默认值为- true。
- conditionals,默认值为- true。
- dead_code,默认值为- true。
- defaults,默认值为- true。
- directives,默认值为- true。
- drop_console,默认值为- false。
- drop_debugger,默认值为- true。
- ecma,默认值为- 5。
- evaluate,默认值为- true。
- global_defs,默认值为- {}。
- hoist_funs,默认值为- false。
- hoist_props,默认值为- true。
- hoist_vars,默认值为- false。
- ie8,忽略。
- if_return,默认值为- true。
- inline,默认值为- true。
- join_vars,默认值为- true。
- keep_classnames,默认值为- false。
- keep_fargs,默认值为- false。
- keep_infinity,默认值为- false。
- loops,默认值为- true。
- negate_iife,默认值为- true。
- passes,默认值为- 0,表示没有限制。
- properties,默认值为- true。
- pure_getters,默认值为 ``。
- pure_funcs,默认值为- []。类型为字符串数组。
- reduce_funcs,默认值为- false。
- reduce_vars,默认值为- true。
- sequences,默认值为- true。
- side_effects,默认值为- true。
- switches,默认值为- true。
- top_retain,默认值为 ``。
- toplevel,默认值为- true。
- typeofs,默认值为- true。
- unsafe,默认值为- false。
- unsafe_arrows,默认值为- false。
- unsafe_comps,默认值为- false。
- unsafe_Function,默认值为- false。
- unsafe_math,默认值为- false。
- unsafe_symbols,默认值为- false。
- unsafe_methods,默认值为- false。
- unsafe_proto,默认值为- false。
- unsafe_regexp,默认值为- false。
- unsafe_undefined,默认值为- false。
- unused,默认值为- true。
- module, 忽略。目前,所有文件都被视为模块。
jsc.minify.mangle
类型:boolean | object。
类似于 mangle 选项 (在新标签页中打开) 的 terser。
{
  "jsc": {
    "minify": {
      "mangle": true // equivalent to {}
    }
  }
}- props, 默认值为- false,而- true等同于- {}。
- topLevel, 默认值为- true。为了与- terser兼容,它被别名为- toplevel。
- keepClassNames, 默认值为- false。为了与- terser兼容,它被别名为- keep_classnames。
- keepFnNames, 默认值为- false。
- keepPrivateProps, 默认值为- false。为了与- terser兼容,它被别名为- keep_private_props。
- reserved, 默认值为- []
- ie8,忽略。
- safari10, 默认值为- false。
jsc.minify.mangle.properties
类型: object。
类似于 mangle 属性选项 (在新标签页中打开) 的 terser。
{
  "jsc": {
    "minify": {
      "mangle":{
        "properties":{
          "reserved": ["foo", "bar"],
          "undeclared":false,
          "regex":"rust regex"
        }
      }
    }
  }
}- 
reserved: 不要将这些名称用作属性。
- 
undeclared: 即使未声明,也要混淆属性。
- 
regex: 仅当属性与该正则表达式匹配时才混淆属性。
jsc.minify.format
这些属性大多尚未实现,但它存在于支持将 terser 配置传递给 swc minify 而不进行修改。
- asciiOnly, 默认值为- false。它在- v1.2.184中实现,并被别名为- ascii_only,以与- terser兼容。
- beautify, 默认值为- false。目前是空操作。
- braces, 默认值为- false。目前是空操作。
- comments, 默认值为- some。- false删除所有注释
- 'some'保留一些注释
- 'all'保留所有注释
 
- ecma, 默认值为 5。目前是空操作。
- indentLevel, 目前是空操作,并被别名为- indent_level,以与- terser兼容。
- indentStart, 目前是空操作,并被别名为- indent_start,以与- terser兼容。
- inlineScript, 目前是空操作,并被别名为- inline_script,以与- terser兼容。
- keepNumbers, 目前是空操作,并被别名为- keep_numbers,以与- terser兼容。
- keepQuotedProps,目前为无操作函数,并作为- keep_quoted_props的别名,以兼容- terser。
- maxLineLen,目前为无操作函数,并作为- max_line_len的别名,以兼容- terser。
- preamble,自- v1.3.66版本起支持。
- quoteKeys,目前为无操作函数,并作为- quote_keys的别名,以兼容- terser。
- quoteStyle,目前为无操作函数,并作为- quote_style的别名,以兼容- terser。
- preserveAnnotations,目前为无操作函数,并作为- preserve_annotations的别名,以兼容- terser。
- safari10,目前为无操作函数。
- semicolons,目前为无操作函数。
- shebang,目前为无操作函数。
- webkit,目前为无操作函数。
- wrapIife,目前为无操作函数,并作为- wrap_iife的别名,以兼容- terser。
- wrapFuncArgs,目前为无操作函数,并作为- wrap_func_args的别名,以兼容- terser。
@swc/core 使用
swc.minify(code, options)
此 API 为异步 API,所有解析、压缩和代码生成操作将在后台线程中执行。 options 参数与 jsc.minify 对象相同。例如
import swc from "@swc/core";
 
const { code, map } = await swc.minify(
  "import foo from '@src/app'; console.log(foo)",
  {
    compress: false,
    mangle: true,
  }
);
 
expect(code).toMatchInlineSnapshot(`"import a from'@src/app';console.log(a);"`);返回 Promise<{ code: string, map: string }>。
swc.minifySync(code, options)
此 API 存在于 @swc/core、@swc/wasm、@swc/wasm-web 中。
import swc from "@swc/core";
 
const { code, map } = swc.minifySync(
  "import foo from '@src/app'; console.log(foo)",
  {
    compress: false,
    mangle: true,
    module: true
  }
);
 
expect(code).toMatchInlineSnapshot(`"import a from'@src/app';console.log(a);"`);返回 { code: string, map: string }。
WebAssembly API
替换 Terser
您可以通过 yarn resolutions (opens in a new tab) 减少构建时间并覆盖 Terser,而无需使用库来更新其依赖项。示例 package.json 将包含
{
  "resolutions": { "terser": "npm:@swc/core" }
}这将使用 SWC 压缩器而不是 Terser 来压缩所有嵌套依赖项。确保删除您的锁文件并重新安装您的依赖项。
$ rm -rf node_modules yarn.lock
$ yarn