From d291ab02a33a22471530c98636ec69fd10c5917b Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 2 Mar 2022 22:36:02 -0800 Subject: [PATCH 1/2] Use terser on esbuild's output Not sure if this is the best approach, may change to different bundle strategy. --- build.ninja | 9 +++++++-- out/bundle-size.json | 2 +- package.json | 1 + pnpm-lock.yaml | 44 ++++++++++++++++++++++++++++++++++++++++++++ tools/configure.js | 7 ++++++- 5 files changed, 59 insertions(+), 4 deletions(-) diff --git a/build.ninja b/build.ninja index 8ef233b..af06b88 100644 --- a/build.ninja +++ b/build.ninja @@ -1,4 +1,4 @@ -wordleOut = ..\\..\\..\\Documents\\website\\wordle-helper\\index.html +wordleOut = dist/index.html minifyOpts = --minify src = src dist = dist @@ -20,6 +20,9 @@ rule calcBundleSize rule esbuild command = node ./node_modules/esbuild/bin/esbuild $minifyOpts --bundle $in --outfile=$out +rule terser + command = node ./node_modules/terser/bin/terser $in --compress --mangle -o $out + rule gobuilddir command = go build -o $bin/ $goLinkFlags $relative/$in @@ -27,7 +30,9 @@ build $bin/build.exe: gobuilddir cmd/build build $dist/index.css: esbuild $src/index.css -build $dist/index.js: esbuild $src/index.js | $src/compile-guesses.ts $src/common.ts $src/filter-guesses.ts $src/common-dom.ts +build $dist/index-esbuild.js: esbuild $src/index.js | $src/compile-guesses.ts $src/common.ts $src/filter-guesses.ts $src/common-dom.ts + +build $dist/index.js: terser $dist/index-esbuild.js build $dist/make-suggestion-nodes.cjs: esbuild $tools/make-suggestion-nodes.js | $src/common.ts $src/filter-guesses.ts $src/common-dom.ts $src/compile-guesses.ts minifyOpts = --platform=node diff --git a/out/bundle-size.json b/out/bundle-size.json index 93532a1..787a22a 100644 --- a/out/bundle-size.json +++ b/out/bundle-size.json @@ -1 +1 @@ -{ "gzip": 10172, "parsed": 26209 } +{ "gzip": 10064, "parsed": 25759 } diff --git a/package.json b/package.json index f121977..6a4ef39 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "@types/node": "^17.0.21", "esbuild": "^0.14.25", "prettier": "^2.5.1", + "terser": "^5.12.0", "typescript": "^4.6.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cce479c..db08e3e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,12 +4,14 @@ specifiers: '@types/node': ^17.0.21 esbuild: ^0.14.25 prettier: ^2.5.1 + terser: ^5.12.0 typescript: ^4.6.2 devDependencies: '@types/node': 17.0.21 esbuild: 0.14.25 prettier: 2.5.1 + terser: 5.12.0 typescript: 4.6.2 packages: @@ -18,6 +20,20 @@ packages: resolution: {integrity: sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==} dev: true + /acorn/8.7.0: + resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + /esbuild-android-64/0.14.25: resolution: {integrity: sha512-L5vCUk7TzFbBnoESNoXjU3x9+/+7TDIE/1mTfy/erAfvZAqC+S3sp/Qa9wkypFMcFvN9FzvESkTlpeQDolREtQ==} engines: {node: '>=12'} @@ -232,6 +248,34 @@ packages: hasBin: true dev: true + /source-map-support/0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.7.3: + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} + dev: true + + /terser/5.12.0: + resolution: {integrity: sha512-R3AUhNBGWiFc77HXag+1fXpAxTAFRQTJemlJKjAgD9r8xXTpjNKqIXwHM/o7Rh+O0kUJtS3WQVdBeMKFk5sw9A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + acorn: 8.7.0 + commander: 2.20.3 + source-map: 0.7.3 + source-map-support: 0.5.21 + dev: true + /typescript/4.6.2: resolution: {integrity: sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==} engines: {node: '>=4.2.0'} diff --git a/tools/configure.js b/tools/configure.js index 11d49b8..2f1fbee 100644 --- a/tools/configure.js +++ b/tools/configure.js @@ -40,6 +40,9 @@ rule calcBundleSize rule esbuild command = ${esbuildBinary} $minifyOpts --bundle $in --outfile=$out +rule terser + command = node ./node_modules/terser/bin/terser $in --compress --mangle -o $out + rule gobuilddir command = go build -o $bin/ $goLinkFlags $relative/$in @@ -47,7 +50,9 @@ build $bin/build${platformExt}: gobuilddir cmd/build build $dist/index.css: esbuild $src/index.css -build $dist/index.js: esbuild $src/index.js | $src/compile-guesses.ts $src/common.ts $src/filter-guesses.ts $src/common-dom.ts +build $dist/index-esbuild.js: esbuild $src/index.js | $src/compile-guesses.ts $src/common.ts $src/filter-guesses.ts $src/common-dom.ts + +build $dist/index.js: terser $dist/index-esbuild.js build $dist/make-suggestion-nodes.cjs: esbuild $tools/make-suggestion-nodes.js | $src/common.ts $src/filter-guesses.ts $src/common-dom.ts $src/compile-guesses.ts minifyOpts = --platform=node From 9974020bc6c76e8c90c003642f2dd0c6af0fff4b Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 4 Mar 2022 21:12:50 -0800 Subject: [PATCH 2/2] Add more advanced compression Reduce by another 40 bytes --- build.ninja | 2 +- out/bundle-size.json | 2 +- tools/configure.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.ninja b/build.ninja index af06b88..8192a8b 100644 --- a/build.ninja +++ b/build.ninja @@ -21,7 +21,7 @@ rule esbuild command = node ./node_modules/esbuild/bin/esbuild $minifyOpts --bundle $in --outfile=$out rule terser - command = node ./node_modules/terser/bin/terser $in --compress --mangle -o $out + command = node ./node_modules/terser/bin/terser $in --compress unsafe,unsafe_arrows,passes=2 --mangle -o $out rule gobuilddir command = go build -o $bin/ $goLinkFlags $relative/$in diff --git a/out/bundle-size.json b/out/bundle-size.json index 787a22a..bbf730e 100644 --- a/out/bundle-size.json +++ b/out/bundle-size.json @@ -1 +1 @@ -{ "gzip": 10064, "parsed": 25759 } +{ "gzip": 10028, "parsed": 25693 } diff --git a/tools/configure.js b/tools/configure.js index 2f1fbee..58573cc 100644 --- a/tools/configure.js +++ b/tools/configure.js @@ -41,7 +41,7 @@ rule esbuild command = ${esbuildBinary} $minifyOpts --bundle $in --outfile=$out rule terser - command = node ./node_modules/terser/bin/terser $in --compress --mangle -o $out + command = node ./node_modules/terser/bin/terser $in --compress unsafe,unsafe_arrows,passes=2 --mangle -o $out rule gobuilddir command = go build -o $bin/ $goLinkFlags $relative/$in