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