选项
解析选项
-
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
。要对不使用this
或arguments
的常规 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)
等。注意:comparisons
与lhs_constants
启用时效果最佳。 -
computed_props
(默认值:true
) -- 将常量计算属性转换为常规属性:{["computed"]: 1}
转换为{computed: 1}
。 -
conditionals
(默认值:true
) -- 对if
语句和条件表达式应用优化 -
dead_code
(默认值:true
) -- 删除不可达代码 -
directives
(默认值:true
) -- 删除冗余或非标准指令 -
drop_console
(默认值:false
) -- 传递true
以丢弃对console.*
函数的调用。如果您只想丢弃部分控制台,可以传递一个数组,例如['log', 'info']
,这将只丢弃console.log
、console.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_props
与mangle
启用、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
) -- 连接连续的var
、let
和const
语句 -
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
) -- 当我们可以静态确定条件时,对do
、while
和for
循环进行优化。 -
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.bar
或foo["bar"]
)没有任何副作用。指定"strict"
以仅在foo
确定不会抛出异常(即不是null
或undefined
)时才将foo.bar
视为无副作用。 -
pure_new
(默认值:false
) -- 设置为true
以假定new X()
从不产生副作用。 -
reduce_vars
(默认值:true
) -- 改进对使用常量值赋值和使用的变量的优化。 -
reduce_funcs
(默认值:true
) -- 尽可能内联单次使用的函数。取决于是否启用了reduce_vars
。禁用此选项有时可以提高输出代码的性能。 -
sequences
(默认值:true
) -- 使用逗号运算符连接连续的简单语句。可以设置为正整数,以指定将生成的最大连续逗号序列数。如果此选项设置为true
,则默认的sequences
限制为200
。将选项设置为false
或0
以禁用。最小的sequences
长度为2
。sequences
值为1
被视为等同于true
,因此意味着200
。在极少数情况下,默认的序列限制会导致压缩时间非常慢,在这种情况下,建议使用20
或更小的值。 -
side_effects
(默认值:true
) -- 删除没有副作用且结果未被使用的表达式。 -
switches
(默认值:true
) -- 去重并删除不可达的switch
分支 -
toplevel
(默认值:false
) -- 删除顶层作用域中未引用的函数 ("funcs"
) 和/或变量 ("vars"
) (默认值为false
,true
表示同时删除未引用的函数和变量) -
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
) -- 将<
和<=
反转为>
和>=
以允许更好的压缩。当两个操作数中至少有一个是具有计算值的 对象时,这可能是不安全的,因为使用了get
或valueOf
之类的方法。这可能会导致比较中操作数切换后执行顺序发生变化。仅当comparisons
和unsafe_comps
都设置为 true 时,压缩才有效。 -
unsafe_Function
(默认值:false
) -- 当args
和code
都是字符串字面量时,压缩和混淆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
以压缩在使用eval
或with
的作用域中可见的名称。 -
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
)-- 始终在if
、for
、do
、while
或with
语句中插入大括号,即使它们的主体是单个语句。 -
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。