オプション
パースオプション
-
bare_returns
(デフォルトfalse
) -- トップレベルのreturn
文をサポート -
html5_comments
(デフォルトtrue
) -
shebang
(デフォルトtrue
) --#!command
を最初の行としてサポート -
spidermonkey
(デフォルトfalse
) -- Spidermonkey (Mozilla) ASTを受け入れる
圧縮オプション
-
defaults
(デフォルト:true
) -- デフォルトで有効になっているほとんどのcompress
変換を無効にするには、false
を渡します。少数の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
) -- 副作用を許容し、1回だけ使用される非定数変数を縮小します。 -
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
文と条件式に最適化を適用します。 -
dead_code
(デフォルト:true
) -- 到達不可能なコードを削除します。 -
directives
(デフォルト:true
) -- 冗長または非標準のディレクティブを削除します。 -
drop_console
(デフォルト:false
) --console.*
関数の呼び出しを破棄するには、true
を渡します。 consoleの一部のみを破棄する場合は、['log', 'info']
のような配列を渡すことができます。これにより、console.log
、console.info
のみが破棄されます。 -
drop_debugger
(デフォルト:true
) --debugger;
文を削除します。 -
ecma
(デフォルト:5
) -- ES5コードをより小さいES6+と同等の形式に変換するcompress
オプションを有効にするには、2015
以上を渡します。 -
evaluate
(デフォルト:true
) -- 定数式を評価しようとします。 -
expression
(デフォルト:false
) -- ブックマークレットなどで、return
のない終端ステートメントから完了値を保持するには、true
を渡します。 -
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
) -- Chromeでパフォーマンスの問題が発生する可能性のあるInfinity
が1/0
に圧縮されないようにするには、true
を渡します。 -
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"]
)に副作用がないと想定します。foo
がスローしないことが確実な場合、つまりnull
またはundefined
でない場合にのみ、foo.bar
を副作用がないと見なすには、"strict"
を指定します。 -
pure_new
(デフォルト:false
) --new X()
に副作用がないと想定するには、true
に設定します。 -
reduce_vars
(デフォルト:true
) -- 定数値として割り当てられ、使用される変数の最適化を改善します。 -
reduce_funcs
(デフォルト:true
) -- 可能であれば、1回だけ使用される関数をインライン化します。reduce_vars
が有効になっている必要があります。このオプションを無効にすると、出力コードのパフォーマンスが向上する場合があります。 -
sequences
(デフォルト:true
) -- 連結した単純な文をカンマ演算子を使って結合します。生成される連続したカンマシーケンスの最大数を指定するために正の整数に設定できます。このオプションがtrue
に設定されている場合、デフォルトのsequences
の制限は200
です。無効にするには、オプションをfalse
または0
に設定します。最小のsequences
の長さは2
です。sequences
の値が1
は、true
と同等であり、200
を意味するものとして扱われます。まれに、デフォルトの sequences 制限値では圧縮時間が非常に長くなる場合があります。そのような場合は、20
以下の値を推奨します。 -
side_effects
(デフォルト:true
) -- 副作用がなく、結果が使用されない式を削除します。 -
switches
(デフォルト:true
) -- 重複を排除し、到達できないswitch
分岐を削除します。 -
toplevel
(デフォルト:false
) -- トップレベルスコープで参照されていない関数 ("funcs"
) および/または変数 ("vars"
) を削除します (デフォルトはfalse
、参照されていない関数と変数の両方を削除するにはtrue
)。 -
top_retain
(デフォルト:null
) -- 特定のトップレベルの関数と変数がunused
で削除されないようにします (配列、カンマ区切り、正規表現、または関数を使用できます。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
などのメソッドの使用により、2 つのオペランドの少なくとも 1 つが計算値を持つオブジェクトである場合、安全ではない可能性があります。これは、比較のオペランドが切り替えられた後に実行順序が変更される可能性があります。圧縮は、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
が正規表現の場合、正規表現に一致するキーを持つキー/値ペアは簡潔なメソッドに変換されます。注: 有効にした場合、コードが以前の関数をnew
しようとすると、「<メソッド名>
はコンストラクターではありません」という TypeError が発生するリスクがあります。 -
unsafe_proto
(デフォルト:false
) --Array.prototype.slice.call(a)
のような式を[].slice.call(a)
に最適化します。 -
unsafe_regexp
(デフォルト:false
) -- 定数の場合と同じ方法で、変数をRegExp
値で置換できるようにします。 -
unsafe_undefined
(デフォルト:false
) -- スコープ内にundefined
という名前の変数がある場合、void 0
を代入します (変数名はマングルされ、通常は 1 文字に短縮されます)。 -
unused
(デフォルト:true
) -- 参照されていない関数と変数を削除します (単純な直接変数代入は、"keep_assign"
に設定されていない限り、参照としてカウントされません)。
マングルオプション
-
eval
(デフォルトfalse
) --eval
またはwith
が使用されているスコープで表示される名前をマングルするには、true
を渡します。 -
keep_classnames
(デフォルトfalse
) -- クラス名をマングルしないようにするには、true
を渡します。正規表現を渡すと、その正規表現に一致するクラス名のみが保持されます。keep_classnames
compress オプション も参照してください。 -
keep_fnames
(デフォルトfalse
) -- 関数名をマングルしないようにするには、true
を渡します。正規表現を渡すと、その正規表現に一致する関数名のみが保持されます。Function.prototype.name
に依存するコードに役立ちます。keep_fnames
compress オプション も参照してください。 -
module
(デフォルトfalse
) -- トップレベルスコープがグローバルスコープではない ES6 モジュールにはtrue
を渡します。toplevel
を意味し、入力コードは strict モード JS であると想定します。 -
nth_identifier
(デフォルト: 文字頻度分析に基づいて重み付けを行う内部マングラー) -- 順序を n 番目に好ましい (通常は最短の) 識別子に変換するget(n)
関数を持つオブジェクトを渡します。必要に応じて、reset()
、sort()
、およびconsider(chars, delta)
を提供して、ソースコードの文字頻度分析を使用することもできます。 -
reserved
(デフォルト[]
) -- マングルから除外する必要がある識別子の配列を渡します。例:["foo", "bar"]
。 -
toplevel
(デフォルトfalse
) -- トップレベルスコープで宣言された名前をマングルするには、true
を渡します。 -
safari10
(デフォルトfalse
) -- Safari 10 ループイテレータの バグ「let 変数を 2 回宣言できません」を回避するには、true
を渡します。safari10
format オプション も参照してください。
例
// 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
) — ビルトイン DOM プロパティのマングルを許可するには、true
を使用します。この設定をオーバーライドすることはお勧めしません。 -
debug
(デフォルト:false
) — 元の名前を残したまま名前をマングルします。空の文字列""
を渡して有効にするか、空でない文字列を渡してデバッグサフィックスを設定します。 -
keep_quoted
(デフォルト:false
) — プロパティを引用符で囲む方法 ({"prop": ...}
とobj["prop"]
) によって、何がマングルされるかを制御します。"strict"
(推奨) --obj.prop
はマングルされます。false
--obj["prop"]
はマングルされます。true
-- コードの他の場所にobj["prop"]
がない限り、obj.prop
はマングルされます。
-
nth_identifer
(デフォルト: 文字頻度分析に基づいて重み付けを行う内部マングラー) -- 順序を n 番目に好ましい (通常は最短の) 識別子に変換するget(n)
関数を持つオブジェクトを渡します。必要に応じて、reset()
、sort()
、およびconsider(chars, delta)
を提供して、ソースコードの文字頻度分析を使用することもできます。 -
regex
(デフォルト:null
) — 正規表現リテラルまたはパターン文字列 を渡して、正規表現に一致するプロパティのみをマングルします。 -
reserved
(デフォルト:[]
) —reserved
配列にリストされているプロパティ名をマングルしないでください。 -
undeclared
(デフォルト:false
) - これらの名前が既知のトップレベル変数のプロパティとしてアクセスされたが、それらの宣言が入力コードに見つからない場合に、それらの名前をマングルします。プロジェクトの一部のみを縮小する場合に役立ちます。詳細については、#397 を参照してください。
フォーマットオプション
これらのオプションは、Terser の出力コードのフォーマットを制御します。以前は「出力オプション」として知られていました。
-
ascii_only
(デフォルトfalse
) -- 文字列と正規表現の Unicode 文字をエスケープします (非 ASCII 文字を含むディレクティブが無効になります)。 -
beautify
(デフォルトfalse
) -- (非推奨) 出力を美しくするかどうか。レガシーの-b
CLI フラグを使用する場合、これはデフォルトで true に設定されます。 -
braces
(デフォルトfalse
) -- 本体 -
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
) -- Safari 10/11 await バグ を回避するには、このオプションをtrue
に設定します。safari10
mangle オプション も参照してください。 -
semicolons
(デフォルトtrue
) -- 文をセミコロンで区切ります。false
を渡すと、可能な限りセミコロンの代わりに改行が使用され、縮小されたコードが読みやすくなります (gzip 前のサイズは小さくなる可能性があります。gzip 後のサイズはわずかに大きくなります)。 -
shebang
(デフォルトtrue
) -- プリアンブル (bash スクリプト) の shebang#!
を保持します。 -
spidermonkey
(デフォルトfalse
) -- Spidermonkey (Mozilla) AST を生成します。 -
webkit
(デフォルトfalse
) -- WebKit バグの回避策を有効にします。PhantomJS ユーザーはこのオプションをtrue
に設定する必要があります。 -
wrap_iife
(デフォルトfalse
) -- 即時実行関数式をラップするにはtrue
を渡します。詳細は #640 を参照してください。 -
wrap_func_args
(デフォルトtrue
) -- 引数として渡される関数式を括弧で囲まない場合はfalse
を渡します。詳細は OptimizeJS を参照してください。