Skip to content

Commit 65da9e1

Browse files
authored
chore(aws-cdk-lib): minify aws-cdk-lib sources (#18091)
This PR takes one step toward improving the load times for `aws-cdk-lib`. Post-build, `esbuild` is used to minify the source and move source maps to external files. In local testing, this changed the average time for loading `aws-cdk-lib` from ~1110ms to ~830ms (25% reduction), and the size of the locally-packed JS-only source from 53MB to 45MB. Changes went through full v2 pipeline run, passing all tests. Any other suggestions for additional verification welcome. related #18036 ---- *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
1 parent b265e46 commit 65da9e1

File tree

3 files changed

+136
-2
lines changed

3 files changed

+136
-2
lines changed

packages/aws-cdk-lib/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@
3939
"stripDeprecated": true,
4040
"post": [
4141
"node ./scripts/verify-imports-resolve-same.js",
42-
"node ./scripts/verify-imports-shielded.js"
42+
"node ./scripts/verify-imports-shielded.js",
43+
"/bin/bash ./scripts/minify-sources.sh"
4344
]
4445
},
4546
"cdk-package": {
@@ -345,6 +346,7 @@
345346
"@types/fs-extra": "^8.1.2",
346347
"@types/node": "^10.17.60",
347348
"constructs": "^3.3.69",
349+
"esbuild": "^0.14.5",
348350
"fs-extra": "^9.1.0",
349351
"ts-node": "^9.1.1",
350352
"typescript": "~3.8.3"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash
2+
3+
###
4+
# Uses esbuild to minify the built aws-cdk-lib Javascript files to reduce module size
5+
# and speed up loading times.
6+
#
7+
# In local testing, this changed the average time for loading `aws-cdk-lib` from
8+
# 1112ms to 832ms (25% reduction).
9+
#
10+
# There are potentially even more savings available if we were to bundle each submodule
11+
# into a single file; however, experiments with this (so far) have not worked due to circular
12+
# dependencies in imports that lead to errors like "... is not a constructor". There are also
13+
# potentially concerns with relative file usage (e.g., `__dirname`) in source. For now, this helps a bit.
14+
###
15+
16+
scriptdir=$(cd $(dirname $0) && pwd)
17+
cd ${scriptdir}/..
18+
19+
find . -name '*.js' ! -name '.eslintrc.js' ! -path '*node_modules*' | xargs npx esbuild --sourcemap --platform=node --format=cjs --minify-whitespace --minify-syntax --tsconfig=tsconfig.json --allow-overwrite --outdir=.

yarn.lock

+114-1
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,11 @@
17661766
dependencies:
17671767
"@types/glob" "*"
17681768

1769+
"@types/aws-lambda@^8.10.85":
1770+
version "8.10.88"
1771+
resolved "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.88.tgz#1f18ac2e15be30376e86a688a943390e7d6683e5"
1772+
integrity sha512-Gbdr5tmGMGV1bgWDEfgNnfqtS9YVKDCkyAgYPmYIeEQFTSjU+VzVoE0Gc1MyrzREdk3Iu5daUCRU9eQL5s+iYQ==
1773+
17691774
"@types/aws-lambda@^8.10.86":
17701775
version "8.10.86"
17711776
resolved "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.86.tgz#f97d9e2f75f87b03401bcd19737b025ec08de200"
@@ -1878,7 +1883,7 @@
18781883
jest-diff "^26.0.0"
18791884
pretty-format "^26.0.0"
18801885

1881-
"@types/jest@^27.0.3":
1886+
"@types/jest@^27.0.2", "@types/jest@^27.0.3":
18821887
version "27.0.3"
18831888
resolved "https://registry.npmjs.org/@types/jest/-/jest-27.0.3.tgz#0cf9dfe9009e467f70a342f0f94ead19842a783a"
18841889
integrity sha512-cmmwv9t7gBYt7hNKH5Spu7Kuu/DotGa+Ff+JGRKZ4db5eh8PnKS4LuebJ3YLUoyOyIHraTGyULn23YtEAm0VSg==
@@ -4010,86 +4015,171 @@ [email protected]:
40104015
resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.2.tgz#256b7cf2f9d382a2a92a4ff4e13187587c9b7c6a"
40114016
integrity sha512-hEixaKMN3XXCkoe+0WcexO4CcBVU5DCSUT+7P8JZiWZCbAjSkc9b6Yz2X5DSfQmRCtI/cQRU6TfMYrMQ5NBfdw==
40124017

4018+
4019+
version "0.14.6"
4020+
resolved "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.6.tgz#61ef1e6d1535e15167fd325ff6aac7641d8d1e40"
4021+
integrity sha512-s38gxoqFnr42VHDoN5jkvUFJpqOHf2IEki3FKeu/AZzU+FSw6yngUjNBtmkCmBfHvfCEGBCkuqciJTwfwE+YhA==
4022+
40134023
40144024
version "0.14.2"
40154025
resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.2.tgz#891a59ce6bc3aded0265f982469b3eb9571b92f8"
40164026
integrity sha512-Uq8t0cbJQkxkQdbUfOl2wZqZ/AtLZjvJulR1HHnc96UgyzG9YlCLSDMiqjM+NANEy7/zzvwKJsy3iNC9wwqLJA==
40174027

4028+
4029+
version "0.14.6"
4030+
resolved "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.6.tgz#cbb84c7e49cc61cb6de9920d6efc3275b7015c3f"
4031+
integrity sha512-tm9Q5usB6NjbKXUbrGAdW2OKfaHmgda2jmQeqarJkVPcVnz0XEWrn3hO6PGcD9pJr/5qwizBaUH3TzvsIhRlng==
4032+
40184033
40194034
version "0.14.2"
40204035
resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.2.tgz#ab834fffa9c612b2901ca1e77e4695d4d8aa63a2"
40214036
integrity sha512-619MSa17sr7YCIrUj88KzQu2ESA4jKYtIYfLU/smX6qNgxQt3Y/gzM4s6sgJ4fPQzirvmXgcHv1ZNQAs/Xh48A==
40224037

4038+
4039+
version "0.14.6"
4040+
resolved "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.6.tgz#ea92895e2d96da74d680679dcb02bfc930d3bf6f"
4041+
integrity sha512-W1Ytsa4EY5qlx433E2ffWnhT0plPHEWbRg+IhtkNnzQP1jaRaCNRPILUpufmmO78PY8oFx5qAT/vPf73H96R7g==
4042+
40234043
40244044
version "0.14.2"
40254045
resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.2.tgz#f7fc87a83f02de27d5a48472571efa1a432ae86d"
40264046
integrity sha512-aP6FE/ZsChZpUV6F3HE3x1Pz0paoYXycJ7oLt06g0G9dhJKknPawXCqQg/WMyD+ldCEZfo7F1kavenPdIT/SGQ==
40274047

4048+
4049+
version "0.14.6"
4050+
resolved "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.6.tgz#a90db13823e6b0712a21f437de5cedf424e8dff5"
4051+
integrity sha512-Lb9raMwL12FZ4omr6vLlWjIhI+RdXoWEaghv0bAGEo9x1MkfEly83KiEIeJle7VFpGrHsR4OTYyJ4sztcPc+0A==
4052+
40284053
40294054
version "0.14.2"
40304055
resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.2.tgz#bc8758420431106751f3180293cac0b5bc4ce2ee"
40314056
integrity sha512-LSm98WTb1QIhyS83+Po0KTpZNdd2XpVpI9ua5rLWqKWbKeNRFwOsjeiuwBaRNc+O32s9oC2ZMefETxHBV6VNkQ==
40324057

4058+
4059+
version "0.14.6"
4060+
resolved "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.6.tgz#d32c052b4737024a2ed65054382671eb678dd2e6"
4061+
integrity sha512-0xpvXhfu+Qc8uZXTvahuBfOAEIkyUa2XIEzLGV10t66svfZ9mC0ZH+kqiNLr7ETLz+P0PTExv3xtt5YoRD4DeA==
4062+
40334063
40344064
version "0.14.2"
40354065
resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.2.tgz#0cc2dcd816d6d66e255bc7aeac139b1d04246812"
40364066
integrity sha512-8VxnNEyeUbiGflTKcuVc5JEPTqXfsx2O6ABwUbfS1Hp26lYPRPC7pKQK5Dxa0MBejGc50jy7YZae3EGQUQ8EkQ==
40374067

4068+
4069+
version "0.14.6"
4070+
resolved "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.6.tgz#547e0381982b45c86d3ab0f9dbfefa08043c4c89"
4071+
integrity sha512-zm7NwLrnckBqckAL41JW1Z1ddn6HRGo3e4D3aZG+NrlDDu60J2Pv/wVTTc8tEvb2MChAU0kok8InKmoPv0dp6g==
4072+
40384073
40394074
version "0.14.2"
40404075
resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.2.tgz#c790f739aa75b15c153609ea3457153fbe4db93d"
40414076
integrity sha512-4bzMS2dNxOJoFIiHId4w+tqQzdnsch71JJV1qZnbnErSFWcR9lRgpSqWnTTFtv6XM+MvltRzSXC5wQ7AEBY6Hg==
40424077

4078+
4079+
version "0.14.6"
4080+
resolved "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.6.tgz#8575ff2d5663ff85468328971705dd5c63512b43"
4081+
integrity sha512-pYRXlQmgd7kDlkAV3AJHI5u+CpQ40HKVlY2SYuxRKb18BaCLgjhihDn87QYFTcCTYQpoo12LLea6ka4HpDKi0Q==
4082+
40434083
40444084
version "0.14.2"
40454085
resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.2.tgz#96858a1f89ad30274dec780d0e3dd8b5691c6b0c"
40464086
integrity sha512-RlIVp0RwJrdtasDF1vTFueLYZ8WuFzxoQ1OoRFZOTyJHCGCNgh7xJIC34gd7B7+RT0CzLBB4LcM5n0LS+hIoww==
40474087

4088+
4089+
version "0.14.6"
4090+
resolved "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.6.tgz#0095776c41b75afa88c536d9fbe14ff438145d21"
4091+
integrity sha512-T4pL9ABEbL5NKFWkEXpIttXiCWdqvHxtkRMSGKStfk3FmI7W9qtn8cKmCxHUzg1DJ87c+FSWWOS+BmND5nSVwg==
4092+
40484093
40494094
version "0.14.2"
40504095
resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.2.tgz#03e193225afa9b1215d2ec6efe8edf0c03eeed6f"
40514096
integrity sha512-PaylahvMHhH8YMfJPMKEqi64qA0Su+d4FNfHKvlKes/2dUe4QxgbwXT9oLVgy8iJdcFMrO7By4R8fS8S0p8aVQ==
40524097

4098+
4099+
version "0.14.6"
4100+
resolved "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.6.tgz#ef93316d3a341139b4fa3d0149beeb908e233b6b"
4101+
integrity sha512-V2H7diFlZdHy2GUrOw6V2gJMTBSu5FrbkkIp2uwe76Z+BoqCiX+1Qs3lC7Ng0lcx4KoTmzyEW1gRm3RE6Qi83A==
4102+
40534103
40544104
version "0.14.2"
40554105
resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.2.tgz#972f218d2cb5125237376d40ad60a6e5356a782c"
40564106
integrity sha512-Fdwrq2roFnO5oetIiUQQueZ3+5soCxBSJswg3MvYaXDomj47BN6oAWMZgLrFh1oVrtWrxSDLCJBenYdbm2s+qQ==
40574107

4108+
4109+
version "0.14.6"
4110+
resolved "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.6.tgz#a0d43cdd8c145e04961f9873008ea3a52f3f593a"
4111+
integrity sha512-ZOMFyAKxOEy5zAY1dA+5XKbNzj6Olq86Pu6aDBOE7pIN7PtYeVQUw4AmQMC3JNUrT8OjiTi1/bL0HPqLJQ06Yg==
4112+
40584113
40594114
version "0.14.2"
40604115
resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.2.tgz#20b71622ac09142b0e523f633af0829def7fed6b"
40614116
integrity sha512-vxptskw8JfCDD9QqpRO0XnsM1osuWeRjPaXX1TwdveLogYsbdFtcuiuK/4FxGiNMUr1ojtnCS2rMPbY8puc5NA==
40624117

4118+
4119+
version "0.14.6"
4120+
resolved "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.6.tgz#9710f27d1a896f352693c60b355a76e360db54db"
4121+
integrity sha512-vl+fAVdV2R19InpZEyLj3pSUNMHUDEp6dX5Apn9MMpIYPn+LhLoTeIVKnS+eMxoOWCH3qGLoHJ8p/9n1USinLQ==
4122+
40634123
40644124
version "0.14.2"
40654125
resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.2.tgz#dbd6a25117902ef67aa11d8779dd9c6bca7fbe82"
40664126
integrity sha512-I8+LzYK5iSNpspS9eCV9sW67Rj8FgMHimGri4mKiGAmN0pNfx+hFX146rYtzGtewuxKtTsPywWteHx+hPRLDsw==
40674127

4128+
4129+
version "0.14.6"
4130+
resolved "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.6.tgz#cb0780eccd8ee11a2980c71235943486f4ab2b52"
4131+
integrity sha512-RGbrgvtUzYmTcnOKo97LMaTA8WnGae/mDGSiRY/9196IIxTbtY/kWnVtZp5ro0OOo2/v6tyvtKVOTljTnbXoIA==
4132+
40684133
40694134
version "0.14.2"
40704135
resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.2.tgz#3c5f199eed459b2f88865548394c0b77383d9ca4"
40714136
integrity sha512-120HgMe9elidWUvM2E6mMf0csrGwx8sYDqUIJugyMy1oHm+/nT08bTAVXuwYG/rkMIqsEO9AlMxuYnwR6En/3Q==
40724137

4138+
4139+
version "0.14.6"
4140+
resolved "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.6.tgz#64e43682cf95b9d75df765a987e7205fc06028c6"
4141+
integrity sha512-31qrrCThwRf1yFe/bz7K7Edi2YP46nRgyil7ssJv9dHNdagmy5Tk/WbN/CecVQiS9+ZyrddqdyqERg+Q8xYPNg==
4142+
40734143
40744144
version "0.14.2"
40754145
resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.2.tgz#900a681db6b76c6a7f60fc28d2bfe5b11698641c"
40764146
integrity sha512-Q3xcf9Uyfra9UuCFxoLixVvdigo0daZaKJ97TL2KNA4bxRUPK18wwGUk3AxvgDQZpRmg82w9PnkaNYo7a+24ow==
40774147

4148+
4149+
version "0.14.6"
4150+
resolved "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.6.tgz#84de9097ca56ce1d8e56648fc10494be4f70a665"
4151+
integrity sha512-Hp2iiouX+5yi4ZGT78o15TavNFcIjv9PvZfib/Nx6i5oAcq30eIdHXZvJXse1J4IMy2UTfUwRPp4IbFuq4t8tA==
4152+
40784153
40794154
version "0.14.2"
40804155
resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.2.tgz#61e0ba5bd95b277a55d2b997ac4c04dfe2559220"
40814156
integrity sha512-TW7O49tPsrq+N1sW8mb3m24j/iDGa4xzAZH4wHWwoIzgtZAYPKC0hpIhufRRG/LA30bdMChO9pjJZ5mtcybtBQ==
40824157

4158+
4159+
version "0.14.6"
4160+
resolved "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.6.tgz#be7864377d437d9b10816e9bb1418408171a92aa"
4161+
integrity sha512-dAA64fXfwLCDTwUU3bK1RJhj/NhY/yKWrAr2lSWSqsbonAQmCf5ltO0/jKAZDv58KgOposN+pcN+QXsXsOxofA==
4162+
40834163
40844164
version "0.14.2"
40854165
resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.2.tgz#6ab59ef721ff75c682a1c8ae0570dabb637abddb"
40864166
integrity sha512-Rym6ViMNmi1E2QuQMWy0AFAfdY0wGwZD73BnzlsQBX5hZBuy/L+Speh7ucUZ16gwsrMM9v86icZUDrSN/lNBKg==
40874167

4168+
4169+
version "0.14.6"
4170+
resolved "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.6.tgz#a910009d90b71dff3bb9472ebc0b82f35931da48"
4171+
integrity sha512-LONuzbp2LRC6PEt3BnRvIP9XiqLY+1UMz55rFqSRcx1hKvgwmiMVF7ZOV7Kqi5r/ejIKDmIosOhh3qy6WKqNRA==
4172+
40884173
40894174
version "0.14.2"
40904175
resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.2.tgz#aca2a4f83d2f0d1592ad4be832ed0045fc888cda"
40914176
integrity sha512-ZrLbhr0vX5Em/P1faMnHucjVVWPS+m3tktAtz93WkMZLmbRJevhiW1y4CbulBd2z0MEdXZ6emDa1zFHq5O5bSA==
40924177

4178+
4179+
version "0.14.6"
4180+
resolved "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.6.tgz#25a9dc9c904241423a396b91c43a2a31400edd14"
4181+
integrity sha512-3ntwiIv3EF4jJran1D6FdQLPQyxXq8+j/xtdZj/eWRxYDO8LWlm1ULEx/capZB2JS/GjKkQkmRaaMjWcRJ01wQ==
4182+
40934183
esbuild@^0.14.2:
40944184
version "0.14.2"
40954185
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.2.tgz#9c1e1a652549cc33e44885eea42ea2cc6267edc2"
@@ -4113,6 +4203,29 @@ esbuild@^0.14.2:
41134203
esbuild-windows-64 "0.14.2"
41144204
esbuild-windows-arm64 "0.14.2"
41154205

4206+
esbuild@^0.14.5:
4207+
version "0.14.6"
4208+
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.14.6.tgz#0be1a00c4a334386df31c4130e2a9b51c3ef6403"
4209+
integrity sha512-IbaeG3srFXK2p/WPhBctu9AGcJ1O0ksBbHTYgLwLAAmbonO49p8E06R4P+4B5gVvquNDU1QUa/0wHY6sT4VDmA==
4210+
optionalDependencies:
4211+
esbuild-android-arm64 "0.14.6"
4212+
esbuild-darwin-64 "0.14.6"
4213+
esbuild-darwin-arm64 "0.14.6"
4214+
esbuild-freebsd-64 "0.14.6"
4215+
esbuild-freebsd-arm64 "0.14.6"
4216+
esbuild-linux-32 "0.14.6"
4217+
esbuild-linux-64 "0.14.6"
4218+
esbuild-linux-arm "0.14.6"
4219+
esbuild-linux-arm64 "0.14.6"
4220+
esbuild-linux-mips64le "0.14.6"
4221+
esbuild-linux-ppc64le "0.14.6"
4222+
esbuild-netbsd-64 "0.14.6"
4223+
esbuild-openbsd-64 "0.14.6"
4224+
esbuild-sunos-64 "0.14.6"
4225+
esbuild-windows-32 "0.14.6"
4226+
esbuild-windows-64 "0.14.6"
4227+
esbuild-windows-arm64 "0.14.6"
4228+
41164229
escalade@^3.1.1:
41174230
version "3.1.1"
41184231
resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"

0 commit comments

Comments
 (0)