メインコンテンツにスキップ

オプション

パースオプション

  • 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) など。注:comparisonslhs_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.logconsole.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 オプション passes2 以上に設定されている場合、および 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) -- Chromeでパフォーマンスの問題が発生する可能性のある Infinity1/0 に圧縮されないようにするには、true を渡します。

  • 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.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) -- 圧縮を改善するために、<<=>>= に反転します。これは、getvalueOf などのメソッドの使用により、2 つのオペランドの少なくとも 1 つが計算値を持つオブジェクトである場合、安全ではない可能性があります。これは、比較のオペランドが切り替えられた後に実行順序が変更される可能性があります。圧縮は、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(){} } に変換します。この変換を有効にするには、ecma6 以上に設定する必要があります。 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 標準バージョンを設定します。 ecma2015 以上に設定すると、簡略オブジェクトプロパティ (つまり、{a: a} の代わりに {a}) が出力されます。 ecma オプションは、ビューティファイヤの直接制御下でのみ出力を変更します。入力の互換性のない機能は、そのまま出力されます。たとえば、ecma 設定を 5 にしても、最新のコードは ES5 に変換され**ません**。

  • indent_level (デフォルト 4)

  • indent_start (デフォルト 0) -- すべての行の先頭にその数のスペースを付けます。

  • inline_script (デフォルト true) -- 文字列内の HTML コメントと </script> の出現箇所のスラッシュをエスケープします。

  • keep_numbers (デフォルト false) -- 数値リテラルを元のコードのままにします (10000001e6 に変換するなどの最適化を無効にします)。

  • 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 を参照してください。