跳至主要内容

选项

解析选项

  • bare_returns (默认值 false) -- 支持顶层 return 语句

  • html5_comments (默认值 true)

  • shebang (默认值 true) -- 支持 #!command 作为第一行

  • spidermonkey (默认值 false) -- 接受 Spidermonkey (Mozilla) AST

压缩选项

  • defaults (默认值: true) -- 传递 false 以禁用大多数默认启用的 compress 转换。当您只想启用几个 compress 选项而禁用其余选项时,此选项很有用。

  • arrows (默认值: true) -- 类和对象字面量方法也将转换为箭头函数,如果结果代码更短:m(){return x} 变为 m:()=>x。要对不使用 thisarguments 的常规 ES5 函数执行此操作,请参阅 unsafe_arrows

  • arguments (默认值: false) -- 尽可能用函数参数名替换 arguments[index]

  • booleans (默认值: true) -- 对布尔上下文进行各种优化,例如 !!a ? b : c → a ? b : c

  • booleans_as_integers (默认值: false) -- 将布尔值转换为 0 和 1,同时使与布尔值的比较使用 ==!= 而不是 ===!==

  • collapse_vars (默认值: true) -- 合并单次使用的非常量变量,前提是不产生副作用。

  • comparisons (默认值: true) -- 对二元节点应用某些优化,例如 !(a <= b) → a > b (仅当 unsafe_comps 为 true 时),尝试否定二元节点,例如 a = !b && !c && !d && !e → a=!(b||c||d||e) 等。注意:comparisonslhs_constants 启用时效果最佳。

  • computed_props (默认值: true) -- 将常量计算属性转换为常规属性:{["computed"]: 1} 转换为 {computed: 1}

  • conditionals (默认值: true) -- 对 if 语句和条件表达式应用优化

  • dead_code (默认值: true) -- 删除不可达代码

  • directives (默认值: true) -- 删除冗余或非标准指令

  • drop_console (默认值: false) -- 传递 true 以丢弃对 console.* 函数的调用。如果您只想丢弃部分控制台,可以传递一个数组,例如 ['log', 'info'],这将只丢弃 console.logconsole.info

  • drop_debugger (默认值: true) -- 删除 debugger; 语句

  • ecma (默认值: 5) -- 传递 2015 或更大值以启用 compress 选项,这些选项会将 ES5 代码转换为更小的 ES6+ 等效形式。

  • evaluate (默认值: true) -- 尝试计算常量表达式

  • expression (默认值: false) -- 传递 true 以保留来自没有 return 的终端语句的完成值,例如在书签中。

  • global_defs (默认值: {}) -- 请参阅条件编译

  • hoist_funs (默认值: false) -- 提升函数声明

  • hoist_props (默认值: true) -- 将常量对象和数组字面量中的属性提升为受一组约束的常规变量。例如:var o={p:1, q:2}; f(o.p, o.q); 转换为 f(1, 2);。注意:hoist_propsmangle 启用、compress 选项 passes 设置为 2 或更高以及 compress 选项 toplevel 启用时效果最佳。

  • hoist_vars (默认值: false) -- 提升 var 声明 (默认情况下为 false,因为它似乎会增加输出的大小)

  • if_return (默认值: true) -- 对 if/return 和 if/continue 进行优化

  • inline (默认值: true) -- 内联对具有简单/return 语句的函数的调用

    • false -- 与 0 相同
    • 0 -- 禁用内联
    • 1 -- 内联简单函数
    • 2 -- 内联具有参数的函数
    • 3 -- 内联具有参数和变量的函数
    • true -- 与 3 相同
  • join_vars (默认值: true) -- 连接连续的 varletconst 语句

  • keep_classnames (默认值: false) -- 传递 true 以防止压缩器丢弃类名。传递正则表达式以仅保留与该正则表达式匹配的类名。另请参阅:keep_classnames mangle 选项

  • keep_fargs (默认值: true) -- 防止压缩器丢弃未使用的函数参数。对于依赖 Function.length 的代码,您需要此选项。

  • keep_fnames (默认值: false) -- 传递 true 以防止压缩器丢弃函数名。传递正则表达式以仅保留与该正则表达式匹配的函数名。对于依赖 Function.prototype.name 的代码很有用。另请参阅:keep_fnames mangle 选项

  • keep_infinity (默认值: false) -- 传递 true 以防止 Infinity 被压缩为 1/0,这可能会导致 Chrome 出现性能问题。

  • lhs_constants (默认值: true) -- 将常量值移动到二元节点的左侧。foo == 42 → 42 == foo

  • loops (默认值: true) -- 当我们可以静态确定条件时,对 dowhilefor 循环进行优化。

  • module (默认值 false) -- 在压缩 ES6 模块时传递 true。隐含了严格模式和 toplevel 选项。

  • negate_iife (默认值: true) -- 否定返回值被丢弃的“立即调用函数表达式”,以避免代码生成器插入括号。

  • passes (默认值: 1) -- 运行压缩的最大次数。在某些情况下,多次传递会导致代码进一步压缩。请记住,更多次传递将花费更多时间。

  • properties (默认值: true) -- 使用点表示法重写属性访问,例如 foo["bar"] → foo.bar

  • pure_funcs (默认值: null) -- 您可以传递一个名称数组,Terser 将假定这些函数不会产生副作用。危险:不会检查名称是否在范围内重新定义。例如,var q = Math.floor(a/b)。如果变量 q 未在其他地方使用,Terser 将删除它,但仍会保留 Math.floor(a/b),因为它不知道它是什么。您可以传递 pure_funcs: [ 'Math.floor' ] 以告知它此函数不会产生任何副作用,在这种情况下,整个语句都将被丢弃。当前的实现会增加一些开销(压缩速度会变慢)。

  • pure_getters (默认值: "strict") -- 如果您为此传递 true,Terser 将假定对象属性访问(例如 foo.barfoo["bar"])没有任何副作用。指定 "strict" 以仅在 foo 确定不会抛出异常(即不是 nullundefined)时才将 foo.bar 视为无副作用。

  • pure_new (默认值: false) -- 设置为 true 以假定 new X() 从不产生副作用。

  • reduce_vars (默认值: true) -- 改进对使用常量值赋值和使用的变量的优化。

  • reduce_funcs (默认值: true) -- 尽可能内联单次使用的函数。取决于是否启用了 reduce_vars。禁用此选项有时可以提高输出代码的性能。

  • sequences (默认值: true) -- 使用逗号运算符连接连续的简单语句。可以设置为正整数,以指定将生成的最大连续逗号序列数。如果此选项设置为 true,则默认的 sequences 限制为 200。将选项设置为 false0 以禁用。最小的 sequences 长度为 2sequences 值为 1 被视为等同于 true,因此意味着 200。在极少数情况下,默认的序列限制会导致压缩时间非常慢,在这种情况下,建议使用 20 或更小的值。

  • side_effects (默认值: true) -- 删除没有副作用且结果未被使用的表达式。

  • switches (默认值: true) -- 去重并删除不可达的 switch 分支

  • toplevel (默认值: false) -- 删除顶层作用域中未引用的函数 ("funcs") 和/或变量 ("vars") (默认值为 falsetrue 表示同时删除未引用的函数和变量)

  • top_retain (默认值: null) -- 防止特定的顶层函数和变量被 unused 删除 (可以是数组、逗号分隔、RegExp 或函数。隐含 toplevel)

  • typeofs (默认值: true) -- 将 typeof foo == "undefined" 转换为 foo === void 0。注意:建议为 IE10 及更早版本将此值设置为 false,因为已知问题。

  • unsafe (默认值: false) -- 应用“不安全”转换 (详情)。

  • unsafe_arrows (默认值: false) -- 如果函数体不引用 this,则将 ES5 风格的匿名函数表达式转换为箭头函数。注意:如果代码依赖于具有 prototype 的函数(箭头函数没有),则执行此转换并不总是安全的。此转换要求将 ecma 压缩选项设置为 2015 或更大。

  • unsafe_comps (默认值: false) -- 将 <<= 反转为 >>= 以允许更好的压缩。当两个操作数中至少有一个是具有计算值的 对象时,这可能是不安全的,因为使用了 getvalueOf 之类的方法。这可能会导致比较中操作数切换后执行顺序发生变化。仅当 comparisonsunsafe_comps 都设置为 true 时,压缩才有效。

  • unsafe_Function (默认值: false) -- 当 argscode 都是字符串字面量时,压缩和混淆 Function(args, code)

  • unsafe_math (默认值: false) -- 优化数值表达式,例如将 2 * x * 3 优化为 6 * x,这可能会导致不精确的浮点数结果。

  • unsafe_symbols(默认值:false)-- 从原生 Symbol 声明中移除键,例如 Symbol("kDog") 变为 Symbol()

  • unsafe_methods(默认值:false)-- 将 { m: function(){} } 转换为 { m(){} }。必须将 ecma 设置为 6 或更高版本才能启用此转换。如果 unsafe_methods 是一个 RegExp,则键与 RegExp 匹配的键/值对将被转换为简洁方法。注意:如果启用此选项,则存在如果任何代码尝试对之前的函数执行 new 操作,则可能会出现“<method name> 不是构造函数”的 TypeError。

  • unsafe_proto(默认值:false)-- 将 Array.prototype.slice.call(a) 之类的表达式优化为 [].slice.call(a)

  • unsafe_regexp(默认值:false)-- 启用使用 RegExp 值替换变量,就像它们是常量一样。

  • unsafe_undefined(默认值:false)-- 如果在作用域中存在名为 undefined 的变量,则替换为 void 0(变量名将被压缩,通常缩减为单个字符)

  • unused(默认值:true)-- 删除未引用的函数和变量(简单的直接变量赋值不算作引用,除非设置为 "keep_assign"

压缩选项

  • eval(默认值 false)-- 传递 true 以压缩在使用 evalwith 的作用域中可见的名称。

  • keep_classnames(默认值 false)-- 传递 true 以不压缩类名。传递一个正则表达式以仅保留与该正则表达式匹配的类名。另请参阅:keep_classnames 压缩选项

  • keep_fnames(默认值 false)-- 传递 true 以不压缩函数名。传递一个正则表达式以仅保留与该正则表达式匹配的函数名。对于依赖 Function.prototype.name 的代码很有用。另请参阅:keep_fnames 压缩选项

  • module(默认值 false)-- 传递 true 表示 ES6 模块,其中顶级作用域不是全局作用域。意味着 toplevel 并假定输入代码是严格模式的 JS。

  • nth_identifier(默认值:一个基于字符频率分析进行权衡的内部压缩器)-- 传递一个带有 get(n) 函数的对象,该函数将序数转换为第 n 个最常用(通常是最短)的标识符。还可以选择提供 reset()sort()consider(chars, delta) 来使用源代码的字符频率分析。

  • reserved(默认值 [])-- 传递一个标识符数组,这些标识符应从压缩中排除。例如:["foo", "bar"]

  • toplevel(默认值 false)-- 传递 true 以压缩在顶级作用域中声明的名称。

  • safari10(默认值 false)-- 传递 true 以解决 Safari 10 循环迭代器 错误“无法声明两次 let 变量”。另请参阅:safari10 格式选项

示例

// test.js
var globalVar;
function funcName(firstLongName, anotherLongName) {
var myVariable = firstLongName + anotherLongName;
}
var code = fs.readFileSync("test.js", "utf8");

await minify(code).code;
// 'function funcName(a,n){}var globalVar;'

await minify(code, { mangle: { reserved: ['firstLongName'] } }).code;
// 'function funcName(firstLongName,a){}var globalVar;'

await minify(code, { mangle: { toplevel: true } }).code;
// 'function n(n,a){}var a;'

属性压缩选项

  • builtins(默认值:false)— 使用 true 允许压缩内置 DOM 属性。不建议覆盖此设置。

  • debug(默认值:false)— 压缩名称,同时保留原始名称。传递空字符串 "" 以启用,或传递非空字符串以设置调试后缀。

  • keep_quoted(默认值:false)— 如何引用属性({"prop": ...}obj["prop"])控制哪些内容被压缩。

    • "strict"(推荐)-- obj.prop 被压缩。
    • false -- obj["prop"] 被压缩。
    • true -- 除非代码中其他地方存在 obj["prop"],否则 obj.prop 将被压缩。
  • nth_identifer(默认值:一个基于字符频率分析进行权衡的内部压缩器)-- 传递一个带有 get(n) 函数的对象,该函数将序数转换为第 n 个最常用(通常是最短)的标识符。还可以选择提供 reset()sort()consider(chars, delta) 来使用源代码的字符频率分析。

  • regex(默认值:null)— 传递一个 RegExp 字面量或模式字符串 以仅压缩与正则表达式匹配的属性。

  • reserved(默认值:[])— 不要压缩 reserved 数组中列出的属性名称。

  • undeclared(默认值:false) - 当将这些名称作为已知顶级变量的属性访问但从未在输入代码中找到其声明时,压缩这些名称。当仅压缩项目的一部分时可能很有用。有关更多详细信息,请参阅 #397

格式选项

这些选项控制 Terser 输出代码的格式。以前称为“输出选项”。

  • ascii_only(默认值 false)-- 转义字符串和正则表达式中的 Unicode 字符(影响包含非 ASCII 字符的指令变得无效)

  • beautify(默认值 false)-- (已弃用)是否美化输出。当使用旧的 -b CLI 标志时,此选项默认设置为 true。

  • braces(默认值 false)-- 始终在 iffordowhilewith 语句中插入大括号,即使它们的主体是单个语句。

  • comments(默认值 "some")-- 默认情况下,它会保留包含“@license”、“@copyright”、“@preserve”或以 ! 开头的 JSDoc 样式注释,传递 true"all" 以保留所有注释,传递 false 以省略输出中的注释,传递正则表达式字符串(例如 /^!/)或函数。

  • ecma(默认值 5)-- 设置输出所需的 EcmaScript 标准版本。将 ecma 设置为 2015 或更高版本以输出简写的对象属性 - 即:{a} 而不是 {a: a}ecma 选项只会更改美化器直接控制下的输出。输入中不兼容的功能仍将按原样输出。例如:将 ecma 设置为 5 不会将现代代码转换为 ES5。

  • indent_level(默认值 4

  • indent_start(默认值 0)-- 在所有行前面加上那么多空格

  • inline_script(默认值 true)-- 转义字符串中 HTML 注释和 </script> 中的斜杠

  • keep_numbers(默认值 false)-- 保留原始代码中的数字字面量(禁用将 1000000 转换为 1e6 等优化)

  • keep_quoted_props(默认值 false)-- 启用后,防止从对象字面量中的属性名称中删除引号。

  • max_line_len(默认值 false)-- 最大行长度(对于压缩代码)

  • preamble(默认值 null)-- 传递时,它必须是一个字符串,并且将按字面意思添加到输出的开头。源映射将针对此文本进行调整。例如,可用于插入包含许可信息的注释。

  • quote_keys(默认值 false)-- 传递 true 以引用字面量对象中的所有键

  • quote_style(默认值 0)-- 字符串的首选引号样式(也会影响带引号的属性名称和指令)

    • 0 -- 首选双引号,当字符串本身中双引号较多时切换为单引号。0 对 gzip 大小来说是最好的。
    • 1 -- 始终使用单引号
    • 2 -- 始终使用双引号
    • 3 -- 始终使用原始引号
  • preserve_annotations -- (默认值 false) -- 在输出中保留 Terser 注释

  • safari10(默认值 false)-- 将此选项设置为 true 以解决 Safari 10/11 await 错误。另请参阅:safari10 压缩选项

  • semicolons(默认值 true)-- 使用分号分隔语句。如果传递 false,则只要有可能,我们将使用换行符而不是分号,从而使压缩代码更具可读性(gzip 压缩前的大小可能更小;gzip 压缩后的 insignificantly 更大)。

  • shebang(默认值 true)-- 在前导码中保留 shebang #!(bash 脚本)

  • spidermonkey(默认值 false)-- 生成 Spidermonkey (Mozilla) AST

  • webkit(默认值 false)-- 启用 WebKit 错误的解决方法。PhantomJS 用户应将此选项设置为 true

  • wrap_iife(默认值 false)-- 传递 true 以包装立即调用的函数表达式。有关更多详细信息,请参阅 #640

  • wrap_func_args(默认值 true)-- 如果您不想将作为参数传递的函数表达式括在括号中,请传递 false。有关更多详细信息,请参阅 OptimizeJS