跳至内容
文档
配置
代码压缩

代码压缩

⚠️

本节适用于希望在构建过程的最后一步使用 swc 的用户。如果您希望将 swc 压缩器与打包器一起使用,请参阅其关于 swcMinify 的文档。


Webpack 文档

v1.2.67 开始,您可以通过在您的 .swcrc 文件中启用 minify 来配置 SWC 以压缩您的代码。

.swcrc
{
  // 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

.swcrc
{
  "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

.swcrc
{
  "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

.swcrc
{
  "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 将包含

package.json
{
  "resolutions": { "terser": "npm:@swc/core" }
}

这将使用 SWC 压缩器而不是 Terser 来压缩所有嵌套依赖项。确保删除您的锁文件并重新安装您的依赖项。

$ rm -rf node_modules yarn.lock
$ yarn
最后更新于 2024 年 4 月 15 日