swc/crates/swc_ecma_minifier
Donny/강동윤 68e9017376
fix(es/minifier): Improve minifier (#3350)
swc_ecma_transforms_optimization:
 - `expr_simplifier`: Track more changes.

swc_ecma_minifier:
 - Analyze after applying the pure optimizer.
 - Preserve access to a variable not in scope.
 - `compress`: Remove string literal if it was not a directive.
 - `pure/collapse_vars`: Merge vars declared in the first statement into one with initializers if `collapse_vars` and `join_vars` are enabled.
 - `unused`: Use `usage_count` instead of `ref_count`.
 - `unused`: Fix dropping rule for member expressions.
 - `unused`: Fix dropping rule for declarations.
 - `hoist_props`: Preserve exported items.
2022-01-27 15:36:22 +09:00
..
examples chore(ci): Configure clippy (#3250) 2022-01-13 23:06:11 +09:00
inputs fix(es/minifier): Fix bugs (#2955) 2022-01-05 05:12:52 +09:00
scripts fix(es/minifier): Don't inline functions used as arguments (#3320) 2022-01-20 16:06:23 +09:00
src fix(es/minifier): Improve minifier (#3350) 2022-01-27 15:36:22 +09:00
tests fix(es/minifier): Improve minifier (#3350) 2022-01-27 15:36:22 +09:00
.eslintrc refactor: Flatten ecmascript (#2708) 2021-11-10 19:00:54 +09:00
.gitignore chore(es/minifier): Add scripts to extract tests automatically (#3212) 2022-01-10 16:59:21 +09:00
Cargo.toml chore: Publish crates 2022-01-26 13:12:02 +09:00
package.json fix(es/minifier): Fix optimization of assignment expressions (#3231) 2022-01-12 08:26:56 +09:00
README.md chore: Update markdown files to use "SWC" instead of "swc" (#2744) 2021-11-15 04:26:04 +00: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.

Testing

Real-library tests

You can use vscode to see diffs. Select a file from tests/projects/output and select the corresponding file from tests/projects/refs. Then you can right click to see an option to open diff.

Splitting a library test

Extracting only subset from a library test makes development much easier.

Split status:

  • angular-1.2.5
  • backbone-1.1.0
  • jquery-1.9.1
  • jquery.mobile-1.4.2
  • mootools-1.4.5
  • underscore-1.5.2
  • yui-3.12.0

Tests from terser

Tests ported from terser has

  • input.js
  • config.json
  • mangle.json (if name mangling is enabled)
  • output.js (if exists and can be modified if our one is better or due to lack of frequency-aware base54)
  • output.terser.js (if exists)

Copying tests

Replace the content of terser/test/compress.js with it of scripts/compress.js and run npm run test:compress