Minification
このセクションは、ビルドプロセスの最終ステップとして swc を使用したい人のためのものです。バンドラーで swc minifier を使用したい場合は、swcMinify のドキュメントを参照してください。
Webpack ドキュメント
v1.2.67 から、.swcrc ファイルで minify を有効にすることで、SWC でコードを縮小できます。
{
// Enable minification
"minify": true,
// Optional, configure minification options
"jsc": {
"minify": {
"compress": {
"unused": true
},
"mangle": true
}
}
}設定
コメントに関する注記
jsc.minify.compress を true または {} に設定した場合、SWC はライセンスコメントのみを保持します。これを望まない場合は、jsc.minify.format を変更してください。
jsc.minify.compress
型: boolean | object。
terser の 圧縮オプション (新しいタブで開きます) と同様です。
{
"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オプション (新しいタブで開きます)と同様です。
{
"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 オプション (新しいタブで開きます) と似ています。
{
"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としても使用できます。preambleはv1.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には以下を含めます。
{
"resolutions": { "terser": "npm:@swc/core" }
}これにより、すべてのネストされた依存関係で、Terser の代わりに SWC minifier が使用されます。lockfile を削除し、依存関係を再インストールしてください。
$ rm -rf node_modules yarn.lock
$ yarn