コンテンツへスキップ
ドキュメント
設定
Minification

Minification

⚠️

このセクションは、ビルドプロセスの最終ステップとして swc を使用したい人のためのものです。バンドラーで swc minifier を使用したい場合は、swcMinify のドキュメントを参照してください。


Webpack ドキュメント

v1.2.67 から、.swcrc ファイルで minify を有効にすることで、SWC でコードを縮小できます。

.swcrc
{
  // Enable minification
  "minify": true,
  // Optional, configure minification options
  "jsc": {
    "minify": {
      "compress": {
        "unused": true
      },
      "mangle": true
    }
  }
}

設定

コメントに関する注記

jsc.minify.compresstrue または {} に設定した場合、SWC はライセンスコメントのみを保持します。これを望まない場合は、jsc.minify.format を変更してください。

jsc.minify.compress

型: boolean | object

terser圧縮オプション (新しいタブで開きます) と同様です。

.swcrc
{
  "jsc": {
    "minify": {
      "compress": true // equivalent to {}
    }
  }
}
  • arguments、デフォルトは false
  • arrows、デフォルトは true
  • booleans、デフォルトは true
  • booleans_as_integers、デフォルトは false
  • collapse_vars、デフォルトは true
  • comparisons、デフォルトは true
  • computed_props、デフォルトは true
  • conditionals、デフォルトは true
  • dead_code、デフォルトは true
  • defaults、デフォルトは true
  • directives、デフォルトは true
  • drop_console、デフォルトは false
  • drop_debugger、デフォルトは true
  • ecma、デフォルトは 5
  • evaluate、デフォルトは true
  • global_defs、デフォルトは {}
  • hoist_funs、デフォルトは false
  • hoist_props、デフォルトは true
  • hoist_vars、デフォルトは false
  • ie8、無視されます。
  • if_return、デフォルトは true
  • inline は、デフォルトでtrueです。
  • join_vars は、デフォルトでtrueです。
  • keep_classnames は、デフォルトでfalseです。
  • keep_fargs は、デフォルトでfalseです。
  • keep_infinity は、デフォルトでfalseです。
  • loops は、デフォルトでtrueです。
  • negate_iife は、デフォルトでtrueです。
  • passes は、デフォルトで0です。これは、制限がないことを意味します。
  • properties は、デフォルトでtrueです。
  • pure_getters は、デフォルトでは設定されません。
  • pure_funcs は、デフォルトで[]です。型は文字列の配列です。
  • reduce_funcs は、デフォルトでfalseです。
  • reduce_vars は、デフォルトでtrueです。
  • sequences は、デフォルトでtrueです。
  • side_effects は、デフォルトでtrueです。
  • switches は、デフォルトでtrueです。
  • top_retain は、デフォルトでは設定されません。
  • toplevel は、デフォルトでtrueです。
  • typeofs は、デフォルトでtrueです。
  • unsafe は、デフォルトでfalseです。
  • unsafe_arrows は、デフォルトでfalseです。
  • unsafe_comps は、デフォルトでfalseです。
  • unsafe_Function は、デフォルトでfalseです。
  • unsafe_math は、デフォルトでfalseです。
  • unsafe_symbols は、デフォルトでfalseです。
  • unsafe_methods は、デフォルトでfalseです。
  • unsafe_proto は、デフォルトでfalseです。
  • unsafe_regexp は、デフォルトでfalseです。
  • unsafe_undefined は、デフォルトでfalseです。
  • unused は、デフォルトでtrueです。
  • module は無視されます。現在、すべてのファイルはモジュールとして扱われます。

jsc.minify.mangle

型: boolean | object

terserのmangleオプション (新しいタブで開きます)と同様です。

.swcrc
{
  "jsc": {
    "minify": {
      "mangle": true // equivalent to {}
    }
  }
}
  • props はデフォルトで false であり、true{} と同じです。
  • topLevel はデフォルトで true です。terser との互換性のために toplevel というエイリアスも使用できます。
  • keepClassNames はデフォルトで false です。terser との互換性のために keep_classnames というエイリアスも使用できます。
  • keepFnNames はデフォルトで false です。
  • keepPrivateProps はデフォルトで false です。terser との互換性のために keep_private_props というエイリアスも使用できます。
  • reserved はデフォルトで [] です。
  • ie8、無視されます。
  • safari10 はデフォルトで false です。

jsc.minify.mangle.properties

型: object

terser の mangle properties オプション (新しいタブで開きます) と似ています。

.swcrc
{
  "jsc": {
    "minify": {
      "mangle":{
        "properties":{
          "reserved": ["foo", "bar"],
          "undeclared":false,
          "regex":"rust regex"
        }
      }
    }
  }
}
  • reserved: これらの名前をプロパティとして使用しないでください。

  • undeclared: 宣言されていなくても、プロパティを難読化します。

  • regex: この正規表現に一致する場合のみ、プロパティを難読化します。

jsc.minify.format

これらのプロパティはまだほとんど実装されていませんが、変更せずに terser の設定を swc の minify に渡すことをサポートするために存在します。

  • asciiOnly はデフォルトで false です。v1.2.184 として実装され、terser との互換性のために ascii_only というエイリアスも使用できます。
  • beautify はデフォルトで false です。現在は noop です。
  • braces はデフォルトで false です。現在は noop です。
  • comments はデフォルトで some です。
    • false はすべてのコメントを削除します。
    • 'some' は一部のコメントを保持します。
    • 'all' はすべてのコメントを保持します。
  • ecma はデフォルトで 5 です。現在は noop です。
  • indentLevel は現在 noop であり、terser との互換性のために indent_level というエイリアスも使用できます。
  • indentStart は現在 noop であり、terser との互換性のために indent_start というエイリアスも使用できます。
  • inlineScript は現在 noop であり、terser との互換性のために inline_script というエイリアスも使用できます。
  • keepNumbers は現在 noop であり、terser との互換性のために keep_numbers というエイリアスも使用できます。
  • keepQuotedProps は現在 noop であり、terser との互換性のために keep_quoted_props というエイリアスも使用できます。
  • maxLineLen は現在 noop であり、terser との互換性のために max_line_len としても使用できます。
  • preamblev1.3.66 からサポートされています。
  • quoteKeys は現在 noop であり、terser との互換性のために quote_keys としても使用できます。
  • quoteStyle は現在 noop であり、terser との互換性のために quote_style としても使用できます。
  • preserveAnnotations は現在 noop であり、terser との互換性のために preserve_annotations としても使用できます。
  • safari10 は現在 noop です。
  • semicolons は現在 noop です。
  • shebang は現在 noop です。
  • webkit は現在 noop です。
  • wrapIife は現在 noop であり、terser との互換性のために wrap_iife としても使用できます。
  • wrapFuncArgs は現在 noop であり、terser との互換性のために wrap_func_args としても使用できます。

@swc/core の使用方法

swc.minify(code, options)

このAPIは非同期であり、構文解析、縮小、コード生成はすべてバックグラウンドスレッドで行われます。options引数はjsc.minifyオブジェクトと同じです。例:

import swc from "@swc/core";
 
const { code, map } = await swc.minify(
  "import foo from '@src/app'; console.log(foo)",
  {
    compress: false,
    mangle: true,
  }
);
 
expect(code).toMatchInlineSnapshot(`"import a from'@src/app';console.log(a);"`);

Promise<{ code: string, map: string }>を返します。

swc.minifySync(code, options)

このAPIは、@swc/core@swc/wasm@swc/wasm-webで利用可能です。

import swc from "@swc/core";
 
const { code, map } = swc.minifySync(
  "import foo from '@src/app'; console.log(foo)",
  {
    compress: false,
    mangle: true,
    module: true
  }
);
 
expect(code).toMatchInlineSnapshot(`"import a from'@src/app';console.log(a);"`);

{ code: string, map: string }を返します。

WebAssembly 用のAPI

Terser の置き換え

yarn resolutions (新しいタブで開きます) を使用することで、ビルド時間を短縮し、ライブラリの依存関係を更新する必要なく Terser をオーバーライドできます。例として、package.jsonには以下を含めます。

package.json
{
  "resolutions": { "terser": "npm:@swc/core" }
}

これにより、すべてのネストされた依存関係で、Terser の代わりに SWC minifier が使用されます。lockfile を削除し、依存関係を再インストールしてください。

$ rm -rf node_modules yarn.lock
$ yarn
最終更新日 2024年4月15日