swc/crates/swc_ecma_minifier
강동윤 (Donny) 31f551ecca
Some checks are pending
CI / Cargo fmt (push) Waiting to run
CI / Cargo clippy (push) Waiting to run
CI / Check license of dependencies (push) Waiting to run
CI / Check (macos-latest) (push) Waiting to run
CI / Check (ubuntu-latest) (push) Waiting to run
CI / Check (windows-latest) (push) Waiting to run
CI / Test wasm (binding_core_wasm) (push) Waiting to run
CI / Test wasm (binding_minifier_wasm) (push) Waiting to run
CI / Test wasm (binding_typescript_wasm) (push) Waiting to run
CI / List crates (push) Waiting to run
CI / Test - ${{ matrix.settings.crate }} - ${{ matrix.settings.os }} (push) Blocked by required conditions
CI / Test node bindings - ${{ matrix.os }} (macos-latest) (push) Waiting to run
CI / Test node bindings - ${{ matrix.os }} (windows-latest) (push) Waiting to run
CI / Test with @swc/cli (push) Waiting to run
CI / Miri (better_scoped_tls) (push) Waiting to run
CI / Miri (string_enum) (push) Waiting to run
CI / Miri (swc) (push) Waiting to run
CI / Miri (swc_bundler) (push) Waiting to run
CI / Miri (swc_ecma_codegen) (push) Waiting to run
CI / Miri (swc_ecma_minifier) (push) Waiting to run
CI / Done (push) Blocked by required conditions
Benchmark / Bench everything (push) Waiting to run
chore: Bump crates
2024-08-05 18:14:11 +09:00
..
benches build: Update rustc to nightly-2024-07-21 (#9319) 2024-07-23 05:31:35 +00:00
examples feat(allocator): Add maybe types (#9278) 2024-07-19 13:22:34 +09:00
fuzz fix(deps): update cargo (patch) (#9317) 2024-07-23 18:38:43 +09:00
inputs fix(es/minifier): Fix bugs (#2955) 2022-01-05 05:12:52 +09:00
scripts fix(es/minifier): Abort IIFE invoker in function parameters (#8828) 2024-04-09 15:22:38 +09:00
src fix(es/minifier): Preserve flags while dropping elements of SeqExpr (#8907) 2024-07-31 08:03:04 +00:00
tests fix(es/minifier): Preserve flags while dropping elements of SeqExpr (#8907) 2024-07-31 08:03:04 +00:00
.eslintrc chore(repo): Configure prettier (#4523) 2022-05-04 14:25:28 +00:00
.gitignore feat(es/minifier): Remove duplicate var declarations (#5373) 2022-08-03 13:05:56 +09:00
Cargo.toml chore: Bump crates 2024-08-05 18:14:11 +09:00
package.json fix(es/minifier): Fix optimization of assignment expressions (#3231) 2022-01-12 08:26:56 +09:00
README.md doc(es/minifier): Add contributing section 2024-07-13 17:05:31 +09:00
yarn.lock fix(es/minifier): Fix optimization of assignment expressions (#3231) 2022-01-12 08:26:56 +09:00

Minifier

EcmaScript minifier for the SWC project. This is basically a port of terser.

Note

Currently name mangler is very simple. To focus on creating a MVP, I (kdy1) will use simple logic for name mangler and implement the content-aware name mangler after publishing first non-beta version.

Debugging tips

If the output contains variables named e, t, n it typically means the original library is published in a minified form and the input contains eval. The current swc name mangler does not do anything if eval is used.

Profiling the minifier

From mac os x, run

./scripts/instrument/all.sh path/to/input/dir

Contributing

Testing

Please prefer execution tests over unit tests. Execution tests are more useful because there's no chance of human error while reviewing.

Execution tests

You can add a test to ./tests/exec.rs

You can run ./scripts/exec.sh from ./crates/swc_ecma_minifier to run execution tests of SWC minifier. exec.sh runs the cargo test with --features debug, and it makes the cargo test print lots of debug logging. You can search for "change", and you can know the code responsible the optimization. The minifier has report_change! macro, and it prints the location of the relevant code.

Fixture tests

You can add a test to ./tests/fixture. You can select any directory, but please prefer to use the issues directory. You can run ./scripts/test.sh from ./crates/swc_ecma_minifier to run fixture tests. You can run it like ./scripts/test.sh foo to run test cases only with foo in the file path. If you want to get location of change, you can do ./scripts/test.sh foo --features debug.