Skip to main content

选项


解析选项

  • 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 时),尝试否定二进制节点,例如 a = !b && !c && !d && !e → a=!(b||c||d||e) 等 注: comparisons 在启用 lhs_constants 的情况下效果最佳。

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

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

  • dead_code (默认值: true) -- 删除无法访问的代码

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

  • drop_console (默认值: false) -- 传递 true 以放弃对 console.* 函数的调用。 If you only want to discard a portion of console, you can pass an array like this ['log', 'info'], which will only discard 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_props 在启用 mangle、将 compress 选项 passes 设置为 2 或更高以及启用 compress 选项 toplevel 的情况下效果最佳。

  • hoist_vars (默认值: false) -- 提升 var 声明(默认为 false,因为它通常会增加输出的大小)

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

  • inline (默认值: true) -- 使用 simple/return 语句内联调用函数:

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

  • keep_classnames (默认值: false) -- 传递 true 以防止压缩器丢弃类名。 传递正则表达式以仅保留与该正则表达式匹配的类名。 也可以看看: keep_classnames 混淆选项

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

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

  • 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"])没有任何副作用。 仅当 foo 确定不会抛出时(即不是 nullundefined),才指定 "strict"foo.bar 视为无副作用。

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

  • reduce_vars (默认值: true) -- 改进对分配并用作常量值的变量的优化。

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

  • sequences (默认值: true) -- 使用逗号运算符连接连续的简单语句。 可以设置为正整数以指定将生成的连续逗号序列的最大数量。 如果此选项设置为 true,则默认 sequences 限制为 200。 将选项设置为 false0 以禁用。 最小的 sequences 长度是 21sequences 值被继承为等于 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" 转换 (details)。

  • 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("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 的范围内可见的 mangle 名称。

  • 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 传递给顶层范围中声明的 mangle 名称。

  • safari10 (默认值 false) -- 传递 true 以解决 Safari 10 循环迭代器 bug "不能两次声明 let 变量" 的问题。 也可以看看: safari10 格式选项

例子:

英:Examples:

// 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) — Mangle 名称中的原始名称仍然存在。 传递一个空字符串 "" 来启用,或传递一个非空字符串来设置调试后缀。

  • 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 输出代码的格式。 以前称为 "输出选项"。

英:These options control the format of Terser's output code. Previously known as "output options".

  • 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 会将 not 将现代代码转换为 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) -- 在输出中保留 简洁的注释

  • safari10 (默认值 false) -- 将此选项设置为 true 以解决 Safari 10/11 await bug 问题。 也可以看看: safari10 混淆选项

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

  • 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