代码压缩
从 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