From adf5981a2725a0d948f67011e9c607b81408908f Mon Sep 17 00:00:00 2001
From: Paul Richardson
Date: Tue, 23 Jan 2024 14:37:49 +0000
Subject: [PATCH] chore: Adds bundle analyzer to monitor size of dependencies
* Provides a treemap served via its own webserver to display the relative
sizes of the constituent components of the app
* package.json
* Adds two commands that execute different analyses of the components. Both
execute using the dev webpack-config but the second uses the 'production'
mode to demonstrate what the chunk size looks like in the final build
* webpack.config.dev.js
* Adds the bundle analyzer plugin and keeps the prod version clean of
developer monitoring plugins
---
packages/online-shell/package.json | 5 +-
packages/online-shell/webpack.config.dev.js | 2 +
yarn.lock | 137 +++++++++++++++++++-
3 files changed, 141 insertions(+), 3 deletions(-)
diff --git a/packages/online-shell/package.json b/packages/online-shell/package.json
index 9d9a92f0..13ed3c95 100644
--- a/packages/online-shell/package.json
+++ b/packages/online-shell/package.json
@@ -24,7 +24,9 @@
"build:webpack": "webpack --mode production --progress --config webpack.config.prod.js --output-public-path='/online/'",
"replace-version": "replace __PACKAGE_VERSION_PLACEHOLDER__ $npm_package_version ./build -r",
"test": "jest --watchAll=false --passWithNoTests src/**/*.test.ts*",
- "test:coverage": "yarn test --coverage"
+ "test:coverage": "yarn test --coverage",
+ "analyze:webpack:dev": "webpack --mode development --progress --config webpack.config.dev.js --output-public-path='/online/'",
+ "analyze:webpack:prod": "webpack --mode production --progress --config webpack.config.dev.js --output-public-path='/online/'"
},
"dependencies": {
"@fortawesome/fontawesome-svg-core": "^6.5.1",
@@ -73,6 +75,7 @@
"tsconfig-paths-webpack-plugin": "^4.1.0",
"url": "^0.11.3",
"webpack": "^5.88.1",
+ "webpack-bundle-analyzer": "^4.10.1",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1",
"webpack-merge": "^5.9.0"
diff --git a/packages/online-shell/webpack.config.dev.js b/packages/online-shell/webpack.config.dev.js
index 1e1587a7..6d7e16f2 100644
--- a/packages/online-shell/webpack.config.dev.js
+++ b/packages/online-shell/webpack.config.dev.js
@@ -3,6 +3,7 @@ const { merge } = require('webpack-merge')
const WebpackDevServer = require('webpack-dev-server')
const DotenvPlugin = require('dotenv-webpack')
const historyApiFallback = require('connect-history-api-fallback')
+const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
const path = require('path')
const url = require('url')
const dotenv = require('dotenv')
@@ -53,6 +54,7 @@ module.exports = () => {
systemvars: true,
ignoreStub: true,
}),
+ new BundleAnalyzerPlugin(),
],
devServer: {
diff --git a/yarn.lock b/yarn.lock
index 8d4732e1..e16049c8 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1680,7 +1680,7 @@ __metadata:
languageName: node
linkType: hard
-"@discoveryjs/json-ext@npm:^0.5.0":
+"@discoveryjs/json-ext@npm:0.5.7, @discoveryjs/json-ext@npm:^0.5.0":
version: 0.5.7
resolution: "@discoveryjs/json-ext@npm:0.5.7"
checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918
@@ -2222,6 +2222,7 @@ __metadata:
url: ^0.11.3
web-vitals: ^3.5.1
webpack: ^5.88.1
+ webpack-bundle-analyzer: ^4.10.1
webpack-cli: ^5.1.4
webpack-dev-server: ^4.15.1
webpack-merge: ^5.9.0
@@ -2861,6 +2862,13 @@ __metadata:
languageName: node
linkType: hard
+"@polka/url@npm:^1.0.0-next.24":
+ version: 1.0.0-next.24
+ resolution: "@polka/url@npm:1.0.0-next.24"
+ checksum: 00baec4458ac86ca27edf7ce807ccfad97cd1d4b67bdedaf3401a9e755757588f3331e891290d1deea52d88df2bf2387caf8d94a6835b614d5b37b638a688273
+ languageName: node
+ linkType: hard
+
"@reactflow/background@npm:11.3.6":
version: 11.3.6
resolution: "@reactflow/background@npm:11.3.6"
@@ -4441,6 +4449,13 @@ __metadata:
languageName: node
linkType: hard
+"acorn-walk@npm:^8.0.0":
+ version: 8.3.2
+ resolution: "acorn-walk@npm:8.3.2"
+ checksum: 3626b9d26a37b1b427796feaa5261faf712307a8920392c8dce9a5739fb31077667f4ad2ec71c7ac6aaf9f61f04a9d3d67ff56f459587206fc04aa31c27ef392
+ languageName: node
+ linkType: hard
+
"acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1":
version: 8.2.0
resolution: "acorn-walk@npm:8.2.0"
@@ -4448,6 +4463,15 @@ __metadata:
languageName: node
linkType: hard
+"acorn@npm:^8.0.4":
+ version: 8.11.3
+ resolution: "acorn@npm:8.11.3"
+ bin:
+ acorn: bin/acorn
+ checksum: 76d8e7d559512566b43ab4aadc374f11f563f0a9e21626dd59cb2888444e9445923ae9f3699972767f18af61df89cd89f5eaaf772d1327b055b45cb829b4a88c
+ languageName: node
+ linkType: hard
+
"acorn@npm:^8.1.0, acorn@npm:^8.4.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2, acorn@npm:^8.9.0":
version: 8.10.0
resolution: "acorn@npm:8.10.0"
@@ -5619,6 +5643,13 @@ __metadata:
languageName: node
linkType: hard
+"commander@npm:^7.2.0":
+ version: 7.2.0
+ resolution: "commander@npm:7.2.0"
+ checksum: 53501cbeee61d5157546c0bef0fedb6cdfc763a882136284bed9a07225f09a14b82d2a84e7637edfd1a679fb35ed9502fd58ef1d091e6287f60d790147f68ddc
+ languageName: node
+ linkType: hard
+
"commander@npm:^8.3.0":
version: 8.3.0
resolution: "commander@npm:8.3.0"
@@ -6184,6 +6215,13 @@ __metadata:
languageName: node
linkType: hard
+"debounce@npm:^1.2.1":
+ version: 1.2.1
+ resolution: "debounce@npm:1.2.1"
+ checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e
+ languageName: node
+ linkType: hard
+
"debug@npm:2.6.9":
version: 2.6.9
resolution: "debug@npm:2.6.9"
@@ -6602,6 +6640,13 @@ __metadata:
languageName: node
linkType: hard
+"duplexer@npm:^0.1.2":
+ version: 0.1.2
+ resolution: "duplexer@npm:0.1.2"
+ checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0
+ languageName: node
+ linkType: hard
+
"eastasianwidth@npm:^0.2.0":
version: 0.2.0
resolution: "eastasianwidth@npm:0.2.0"
@@ -8129,6 +8174,15 @@ __metadata:
languageName: node
linkType: hard
+"gzip-size@npm:^6.0.0":
+ version: 6.0.0
+ resolution: "gzip-size@npm:6.0.0"
+ dependencies:
+ duplexer: ^0.1.2
+ checksum: 2df97f359696ad154fc171dcb55bc883fe6e833bca7a65e457b9358f3cb6312405ed70a8da24a77c1baac0639906cd52358dc0ce2ec1a937eaa631b934c94194
+ languageName: node
+ linkType: hard
+
"handle-thing@npm:^2.0.0":
version: 2.0.1
resolution: "handle-thing@npm:2.0.1"
@@ -8291,7 +8345,7 @@ __metadata:
languageName: node
linkType: hard
-"html-escaper@npm:^2.0.0":
+"html-escaper@npm:^2.0.0, html-escaper@npm:^2.0.2":
version: 2.0.2
resolution: "html-escaper@npm:2.0.2"
checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974
@@ -8890,6 +8944,13 @@ __metadata:
languageName: node
linkType: hard
+"is-plain-object@npm:^5.0.0":
+ version: 5.0.0
+ resolution: "is-plain-object@npm:5.0.0"
+ checksum: e32d27061eef62c0847d303125440a38660517e586f2f3db7c9d179ae5b6674ab0f469d519b2e25c147a1a3bc87156d0d5f4d8821e0ce4a9ee7fe1fcf11ce45c
+ languageName: node
+ linkType: hard
+
"is-potential-custom-element-name@npm:^1.0.1":
version: 1.0.1
resolution: "is-potential-custom-element-name@npm:1.0.1"
@@ -11110,6 +11171,13 @@ __metadata:
languageName: node
linkType: hard
+"mrmime@npm:^2.0.0":
+ version: 2.0.0
+ resolution: "mrmime@npm:2.0.0"
+ checksum: f6fe11ec667c3d96f1ce5fd41184ed491d5f0a5f4045e82446a471ccda5f84c7f7610dff61d378b73d964f73a320bd7f89788f9e6b9403e32cc4be28ba99f569
+ languageName: node
+ linkType: hard
+
"ms@npm:2.0.0":
version: 2.0.0
resolution: "ms@npm:2.0.0"
@@ -11469,6 +11537,15 @@ __metadata:
languageName: node
linkType: hard
+"opener@npm:^1.5.2":
+ version: 1.5.2
+ resolution: "opener@npm:1.5.2"
+ bin:
+ opener: bin/opener-bin.js
+ checksum: 33b620c0d53d5b883f2abc6687dd1c5fd394d270dbe33a6356f2d71e0a2ec85b100d5bac94694198ccf5c30d592da863b2292c5539009c715a9c80c697b4f6cc
+ languageName: node
+ linkType: hard
+
"openshift-logos-icon@npm:^1.7.1":
version: 1.7.1
resolution: "openshift-logos-icon@npm:1.7.1"
@@ -13058,6 +13135,17 @@ __metadata:
languageName: node
linkType: hard
+"sirv@npm:^2.0.3":
+ version: 2.0.4
+ resolution: "sirv@npm:2.0.4"
+ dependencies:
+ "@polka/url": ^1.0.0-next.24
+ mrmime: ^2.0.0
+ totalist: ^3.0.0
+ checksum: 6853384a51d6ee9377dd657e2b257e0e98b29abbfbfa6333e105197f0f100c8c56a4520b47028b04ab1833cf2312526206f38fcd4f891c6df453f40da1a15a57
+ languageName: node
+ linkType: hard
+
"sisteransi@npm:^1.0.5":
version: 1.0.5
resolution: "sisteransi@npm:1.0.5"
@@ -13717,6 +13805,13 @@ __metadata:
languageName: node
linkType: hard
+"totalist@npm:^3.0.0":
+ version: 3.0.1
+ resolution: "totalist@npm:3.0.1"
+ checksum: 5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a
+ languageName: node
+ linkType: hard
+
"tough-cookie@npm:^4.1.2":
version: 4.1.3
resolution: "tough-cookie@npm:4.1.3"
@@ -14952,6 +15047,29 @@ __metadata:
languageName: node
linkType: hard
+"webpack-bundle-analyzer@npm:^4.10.1":
+ version: 4.10.1
+ resolution: "webpack-bundle-analyzer@npm:4.10.1"
+ dependencies:
+ "@discoveryjs/json-ext": 0.5.7
+ acorn: ^8.0.4
+ acorn-walk: ^8.0.0
+ commander: ^7.2.0
+ debounce: ^1.2.1
+ escape-string-regexp: ^4.0.0
+ gzip-size: ^6.0.0
+ html-escaper: ^2.0.2
+ is-plain-object: ^5.0.0
+ opener: ^1.5.2
+ picocolors: ^1.0.0
+ sirv: ^2.0.3
+ ws: ^7.3.1
+ bin:
+ webpack-bundle-analyzer: lib/bin/analyzer.js
+ checksum: 77f48f10a493b1cc95674526472978a2de32412ddbf556bd3903738f14890611426f19477352993efe5a9fd6ca16711eb912d986f2221b17ba6eeca1b6f71fb6
+ languageName: node
+ linkType: hard
+
"webpack-cli@npm:^5.1.4":
version: 5.1.4
resolution: "webpack-cli@npm:5.1.4"
@@ -15333,6 +15451,21 @@ __metadata:
languageName: node
linkType: hard
+"ws@npm:^7.3.1":
+ version: 7.5.9
+ resolution: "ws@npm:7.5.9"
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: ^5.0.2
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138
+ languageName: node
+ linkType: hard
+
"ws@npm:^8.11.0, ws@npm:^8.13.0":
version: 8.14.2
resolution: "ws@npm:8.14.2"