swc/ecmascript/minifier
Donny/강동윤 fac6f47863
perf(es/transforms): Improve performance (#2329)
swc_ecma_ast:
 - Implement `Take` for `Function`.
 - Implement `Take` for `FnExpr`.
 - Implement `Take` for `ClassExpr`.

swc_ecma_transforms_compat:
 - Migrate `es2015::duplicate_keys` to `VisitMut`.
 - Migrate `es2015::template_literals` to `VisitMut`.
 - Migrate `es2015::function_name` to `VisitMut`.
 - Add more fast-path to `reserved_words` pass.

swc_ecma_transforms_react:
 - Reduce allocations of `pure_annotations`.
 - Migrate `pure_annotations` to `VisitMut`.
 - Migrate `jsx::display_name` to `VisitMut`.

swc_ecma_transforms_optimization:
 - Migrate `inline_globals` to `VisitMut`.
 - `inline_globals`: Use `Lrc<FxHashMap<K, V>>`.

swc:
 - Cache `current_dir()`.
 - `ModuleConfig::build`: cacnonicalize only if `paths` is used.
2021-10-05 13:31:35 +00:00
..
examples feat(es/minifer): Improve minifier (#2229) 2021-09-16 04:23:33 +00:00
scripts fix(es/minifier): Fix bugs (#2283) 2021-09-27 12:05:31 +00:00
src fix(es/minifier): Fix inlining into shorthand properties (#2348) 2021-10-05 09:53:00 +00:00
tests fix(es/minifier): Fix inlining into shorthand properties (#2348) 2021-10-05 09:53:00 +00:00
.eslintrc feat(es/minifier): Implement more rules (#1871) 2021-07-30 10:11:27 +09:00
.gitignore feat(es/minifier): Implement more rules (#1871) 2021-07-30 10:11:27 +09:00
Cargo.toml perf(es/transforms): Improve performance (#2329) 2021-10-05 13:31:35 +00:00
package.json feat(es/minifer): Improve minifier (#2229) 2021-09-16 04:23:33 +00:00
README.md feat(es/minifier): Implement more rules (#1871) 2021-07-30 10:11:27 +09:00
yarn.lock feat(es/minifer): Improve minifier (#2229) 2021-09-16 04:23:33 +00: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