Open davidjoy opened 4 months ago
I ran npx howfat .
in this repo and this is what I got. If I'm reading this right, removing lodash is going to remove 1054 files (!!!) and 1.35 MB?
@edx/frontend-component-footer@1.0.0-semantically-released (150 deps, 39.2mb, 8916 files, ©undefined)
├─┬ @fortawesome/fontawesome-svg-core@6.5.2 (1 dep, 1.13mb, 16 files, ©MIT)
│ ╰── @fortawesome/fontawesome-common-types@6.5.2 (771.85kb, 5 files, ©MIT)
├─┬ @fortawesome/free-brands-svg-icons@6.5.2 (1 dep, 2.84mb, 1062 files, ©(CC-BY-4.0 AND MIT))
│ ╰── @fortawesome/fontawesome-common-types@6.5.2 (771.85kb, 5 files, ©MIT)
├─┬ @fortawesome/free-regular-svg-icons@6.5.2 (1 dep, 1.4mb, 526 files, ©(CC-BY-4.0 AND MIT))
│ ╰── @fortawesome/fontawesome-common-types@6.5.2 (771.85kb, 5 files, ©MIT)
├─┬ @fortawesome/free-solid-svg-icons@6.5.2 (1 dep, 5.6mb, 3914 files, ©(CC-BY-4.0 AND MIT))
│ ╰── @fortawesome/fontawesome-common-types@6.5.2 (771.85kb, 5 files, ©MIT)
├─┬ @fortawesome/react-fontawesome@0.2.2 (5 deps, 178.39kb, 44 files, ©MIT)
│ ╰─┬ prop-types@15.8.1 (4 deps, 141.47kb, 38 files, ©MIT)
│ ├─┬ loose-envify@1.4.0 (1 dep, 20.39kb, 13 files, ©MIT)
│ │ ╰── js-tokens@4.0.0 (14.72kb, 5 files, ©MIT)
│ ├── object-assign@4.1.1 (5.36kb, 4 files, ©MIT)
│ ╰── react-is@16.13.1 (23.39kb, 9 files, ©MIT)
├─┬ jest-environment-jsdom@29.7.0 (117 deps, 13.4mb, 1848 files, ©MIT)
│ ├─┬ @jest/environment@29.7.0 (56 deps, 3.68mb, 530 files, ©MIT)
│ │ ├── @jest/fake-timers@29.7.0 (🔗, 55 deps, 3.67mb, 526 files, ©MIT)
│ │ ├── @jest/types@29.6.3 (🔗, 15 deps, 2.7mb, 220 files, ©MIT)
│ │ ├── @types/node@20.14.9 (🔗, 1 dep, 2.06mb, 100 files, ©MIT)
│ │ ╰── jest-mock@29.7.0 (🔗, 26 deps, 3.02mb, 309 files, ©MIT)
│ ├─┬ @jest/fake-timers@29.7.0 (55 deps, 3.67mb, 526 files, ©MIT)
│ │ ├── @jest/types@29.6.3 (🔗, 15 deps, 2.7mb, 220 files, ©MIT)
│ │ ├─┬ @sinonjs/fake-timers@10.3.0 (2 deps, 156.41kb, 63 files, ©BSD-3-Clause)
│ │ │ ╰─┬ @sinonjs/commons@3.0.1 (1 dep, 78.19kb, 59 files, ©BSD-3-Clause)
│ │ │ ╰── type-detect@4.0.8 (41.12kb, 5 files, ©MIT)
│ │ ├── @types/node@20.14.9 (🔗, 1 dep, 2.06mb, 100 files, ©MIT)
│ │ ├─┬ jest-message-util@29.7.0 (42 deps, 3.29mb, 385 files, ©MIT)
│ │ │ ├─┬ @babel/code-frame@7.24.7 (11 deps, 194.28kb, 70 files, ©MIT)
│ │ │ │ ├─┬ @babel/highlight@7.24.7 (10 deps, 170.78kb, 65 files, ©MIT)
│ │ │ │ │ ├── @babel/helper-validator-identifier@7.24.7 (48.15kb, 10 files, ©MIT)
│ │ │ │ │ ├─┬ chalk@2.4.2 (6 deps, 83.07kb, 38 files, ©MIT)
│ │ │ │ │ │ ├─┬ ansi-styles@3.2.1 (2 deps, 44.62kb, 18 files, ©MIT)
│ │ │ │ │ │ │ ╰─┬ color-convert@1.9.3 (1 dep, 35.47kb, 14 files, ©MIT)
│ │ │ │ │ │ │ ╰── color-name@1.1.3 (9.14kb, 7 files, ©MIT)
│ │ │ │ │ │ ├── escape-string-regexp@1.0.5 (2.63kb, 4 files, ©MIT)
│ │ │ │ │ │ ╰─┬ supports-color@5.5.0 (1 dep, 9.53kb, 9 files, ©MIT)
│ │ │ │ │ │ ╰── has-flag@3.0.0 (3.05kb, 4 files, ©MIT)
│ │ │ │ │ ├── js-tokens@4.0.0 (🔗, 14.72kb, 5 files, ©MIT)
│ │ │ │ │ ╰── picocolors@1.0.1 (🔗, 5.03kb, 7 files, ©ISC)
│ │ │ │ ╰── picocolors@1.0.1 (5.03kb, 7 files, ©ISC)
│ │ │ ├── @jest/types@29.6.3 (🔗, 15 deps, 2.7mb, 220 files, ©MIT)
│ │ │ ├── @types/stack-utils@2.0.3 (6.28kb, 5 files, ©MIT)
│ │ │ ├── chalk@4.1.2 (🔗, 5 deps, 95.08kb, 33 files, ©MIT)
│ │ │ ├── graceful-fs@4.2.11 (🔗, 31.77kb, 7 files, ©ISC)
│ │ │ ├─┬ micromatch@4.0.7 (5 deps, 234.52kb, 36 files, ©MIT)
│ │ │ │ ├─┬ braces@3.0.3 (3 deps, 91.73kb, 22 files, ©MIT)
│ │ │ │ │ ╰─┬ fill-range@7.1.1 (2 deps, 48.14kb, 12 files, ©MIT)
│ │ │ │ │ ╰─┬ to-regex-range@5.0.1 (1 dep, 31.79kb, 8 files, ©MIT)
│ │ │ │ │ ╰── is-number@7.0.0 (9.39kb, 4 files, ©MIT)
│ │ │ │ ╰── picomatch@2.3.1 (🔗, 87.84kb, 10 files, ©MIT)
│ │ │ ├─┬ pretty-format@29.7.0 (4 deps, 533.63kb, 76 files, ©MIT)
│ │ │ │ ├── @jest/schemas@29.6.3 (🔗, 1 dep, 437.62kb, 48 files, ©MIT)
│ │ │ │ ├── ansi-styles@5.2.0 (13.28kb, 5 files, ©MIT)
│ │ │ │ ╰── react-is@18.3.1 (23.45kb, 8 files, ©MIT)
│ │ │ ├── slash@3.0.0 (3.42kb, 5 files, ©MIT)
│ │ │ ╰─┬ stack-utils@2.0.6 (1 dep, 17.44kb, 9 files, ©MIT)
│ │ │ ╰── escape-string-regexp@2.0.0 (3.18kb, 5 files, ©MIT)
│ │ ├── jest-mock@29.7.0 (🔗, 26 deps, 3.02mb, 309 files, ©MIT)
│ │ ╰── jest-util@29.7.0 (🔗, 25 deps, 2.97mb, 304 files, ©MIT)
│ ├─┬ @jest/types@29.6.3 (15 deps, 2.7mb, 220 files, ©MIT)
│ │ ├─┬ @jest/schemas@29.6.3 (1 dep, 437.62kb, 48 files, ©MIT)
│ │ │ ╰── @sinclair/typebox@0.27.8 (431.69kb, 43 files, ©MIT)
│ │ ├── @types/istanbul-lib-coverage@2.0.6 (5.32kb, 5 files, ©MIT)
│ │ ├─┬ @types/istanbul-reports@3.0.4 (2 deps, 19.57kb, 15 files, ©MIT)
│ │ │ ╰─┬ @types/istanbul-lib-report@3.0.3 (1 dep, 13.05kb, 10 files, ©MIT)
│ │ │ ╰── @types/istanbul-lib-coverage@2.0.6 (🔗, 5.32kb, 5 files, ©MIT)
│ │ ├── @types/node@20.14.9 (🔗, 1 dep, 2.06mb, 100 files, ©MIT)
│ │ ├─┬ @types/yargs@17.0.32 (1 dep, 67.19kb, 14 files, ©MIT)
│ │ │ ╰── @types/yargs-parser@21.0.3 (8.45kb, 5 files, ©MIT)
│ │ ╰─┬ chalk@4.1.2 (5 deps, 95.08kb, 33 files, ©MIT)
│ │ ├─┬ ansi-styles@4.3.0 (2 deps, 49.67kb, 16 files, ©MIT)
│ │ │ ╰─┬ color-convert@2.0.1 (1 dep, 33.09kb, 11 files, ©MIT)
│ │ │ ╰── color-name@1.1.4 (6.54kb, 4 files, ©MIT)
│ │ ╰─┬ supports-color@7.2.0 (1 dep, 11.19kb, 10 files, ©MIT)
│ │ ╰── has-flag@4.0.0 (4.32kb, 5 files, ©MIT)
│ ├─┬ @types/jsdom@20.0.1 (5 deps, 3.16mb, 243 files, ©MIT)
│ │ ├── @types/node@20.14.9 (🔗, 1 dep, 2.06mb, 100 files, ©MIT)
│ │ ├── @types/tough-cookie@4.0.5 (13.22kb, 5 files, ©MIT)
│ │ ╰─┬ parse5@7.1.2 (1 dep, 1.06mb, 132 files, ©MIT)
│ │ ╰── entities@4.5.0 (403.21kb, 68 files, ©BSD-2-Clause)
│ ├─┬ @types/node@20.14.9 (1 dep, 2.06mb, 100 files, ©MIT)
│ │ ╰── undici-types@5.26.5 (71.34kb, 35 files, ©MIT)
│ ├─┬ jest-mock@29.7.0 (26 deps, 3.02mb, 309 files, ©MIT)
│ │ ├── @jest/types@29.6.3 (🔗, 15 deps, 2.7mb, 220 files, ©MIT)
│ │ ├── @types/node@20.14.9 (🔗, 1 dep, 2.06mb, 100 files, ©MIT)
│ │ ╰── jest-util@29.7.0 (🔗, 25 deps, 2.97mb, 304 files, ©MIT)
│ ├─┬ jest-util@29.7.0 (25 deps, 2.97mb, 304 files, ©MIT)
│ │ ├── @jest/types@29.6.3 (🔗, 15 deps, 2.7mb, 220 files, ©MIT)
│ │ ├── @types/node@20.14.9 (🔗, 1 dep, 2.06mb, 100 files, ©MIT)
│ │ ├─┬ chalk@4.1.2 (5 deps, 95.08kb, 33 files, ©MIT)
│ │ │ ├─┬ ansi-styles@4.3.0 (2 deps, 49.67kb, 16 files, ©MIT)
│ │ │ │ ╰─┬ color-convert@2.0.1 (1 dep, 33.09kb, 11 files, ©MIT)
│ │ │ │ ╰── color-name@1.1.4 (6.54kb, 4 files, ©MIT)
│ │ │ ╰─┬ supports-color@7.2.0 (1 dep, 11.19kb, 10 files, ©MIT)
│ │ │ ╰── has-flag@4.0.0 (4.32kb, 5 files, ©MIT)
│ │ ├── ci-info@3.9.0 (25.45kb, 7 files, ©MIT)
│ │ ├── graceful-fs@4.2.11 (31.77kb, 7 files, ©ISC)
│ │ ╰── picomatch@2.3.1 (87.84kb, 10 files, ©MIT)
│ ╰─┬ jsdom@20.0.3 (55 deps, 8.61mb, 1171 files, ©MIT)
│ ├── abab@2.0.6 (10.2kb, 7 files, ©BSD-3-Clause, ⛔ Use your platform's native atob() a…)
│ ├── acorn@8.12.1 (525kb, 10 files, ©MIT)
│ ├─┬ acorn-globals@7.0.1 (2 deps, 585.6kb, 22 files, ©MIT)
│ │ ├── acorn@8.12.1 (🔗, 525kb, 10 files, ©MIT)
│ │ ╰─┬ acorn-walk@8.3.3 (1 dep, 576.38kb, 18 files, ©MIT)
│ │ ╰── acorn@8.12.1 (🔗, 525kb, 10 files, ©MIT)
│ ├── cssom@0.5.0 (50.84kb, 26 files, ©MIT)
│ ├─┬ cssstyle@2.3.0 (1 dep, 219.94kb, 119 files, ©MIT)
│ │ ╰── cssom@0.3.8 (47.85kb, 24 files, ©MIT)
│ ├─┬ data-urls@3.0.2 (6 deps, 393.59kb, 53 files, ©MIT)
│ │ ├── abab@2.0.6 (🔗, 10.2kb, 7 files, ©BSD-3-Clause, ⛔ Use your platform's native atob() a…)
│ │ ├── whatwg-mimetype@3.0.0 (🔗, 16.42kb, 8 files, ©MIT)
│ │ ╰── whatwg-url@11.0.0 (🔗, 3 deps, 359.1kb, 33 files, ©MIT)
│ ├── decimal.js@10.4.3 (276.16kb, 6 files, ©MIT)
│ ├─┬ domexception@4.0.0 (1 dep, 43.38kb, 15 files, ©MIT, ⛔ Use your platform's native DOMExcep…)
│ │ ╰── webidl-conversions@7.0.0 (🔗, 23.67kb, 4 files, ©BSD-2-Clause)
│ ├─┬ escodegen@2.1.0 (4 deps, 1.25mb, 46 files, ©BSD-2-Clause)
│ │ ├── esprima@4.0.1 (306.99kb, 7 files, ©BSD-2-Clause)
│ │ ├── estraverse@5.3.0 (36.22kb, 6 files, ©BSD-2-Clause)
│ │ ├── esutils@2.0.3 (49.4kb, 7 files, ©BSD-2-Clause)
│ │ ╰── source-map@0.6.1 (786.35kb, 20 files, ©BSD-3-Clause)
│ ├─┬ form-data@4.0.0 (5 deps, 306.73kb, 50 files, ©MIT)
│ │ ├── asynckit@0.4.0 (26.72kb, 20 files, ©MIT)
│ │ ├─┬ combined-stream@1.0.8 (1 dep, 19.08kb, 11 files, ©MIT)
│ │ │ ╰── delayed-stream@1.0.0 (7.83kb, 6 files, ©MIT)
│ │ ╰─┬ mime-types@2.1.35 (1 dep, 218.57kb, 11 files, ©MIT)
│ │ ╰── mime-db@1.52.0 (200.72kb, 6 files, ©MIT)
│ ├─┬ html-encoding-sniffer@3.0.0 (3 deps, 405.6kb, 50 files, ©MIT)
│ │ ╰── whatwg-encoding@2.0.0 (🔗, 2 deps, 394.2kb, 46 files, ©MIT)
│ ├─┬ http-proxy-agent@5.0.0 (4 deps, 114.52kb, 41 files, ©MIT)
│ │ ├── @tootallnate/once@2.0.0 (15.95kb, 12 files, ©MIT)
│ │ ├─┬ agent-base@6.0.2 (2 deps, 81.89kb, 21 files, ©MIT)
│ │ │ ╰── debug@4.3.5 (🔗, 1 dep, 48.12kb, 11 files, ©MIT)
│ │ ╰─┬ debug@4.3.5 (1 dep, 48.12kb, 11 files, ©MIT)
│ │ ╰── ms@2.1.2 (6.68kb, 4 files, ©MIT)
│ ├─┬ https-proxy-agent@5.0.1 (5 deps, 155.4kb, 43 files, ©MIT)
│ │ ├─┬ agent-base@6.0.2 (2 deps, 81.89kb, 21 files, ©MIT)
│ │ │ ╰── debug@4.3.5 (🔗, 1 dep, 48.12kb, 11 files, ©MIT)
│ │ ╰─┬ debug@4.3.5 (1 dep, 48.12kb, 11 files, ©MIT)
│ │ ╰── ms@2.1.2 (6.68kb, 4 files, ©MIT)
│ ├── is-potential-custom-element-name@1.0.1 (3.83kb, 4 files, ©MIT)
│ ├── nwsapi@2.2.10 (78.8kb, 7 files, ©MIT)
│ ├─┬ parse5@7.1.2 (1 dep, 1.06mb, 132 files, ©MIT)
│ │ ╰── entities@4.5.0 (403.21kb, 68 files, ©BSD-2-Clause)
│ ├─┬ saxes@6.0.0 (1 dep, 217.51kb, 23 files, ©ISC)
│ │ ╰── xmlchars@2.2.0 (57.58kb, 18 files, ©MIT)
│ ├── symbol-tree@3.2.4 (55.74kb, 7 files, ©MIT)
│ ├─┬ tough-cookie@4.1.4 (6 deps, 673.84kb, 48 files, ©BSD-3-Clause)
│ │ ├── psl@1.9.0 (450.63kb, 9 files, ©MIT)
│ │ ├── punycode@2.3.1 (32.73kb, 5 files, ©MIT)
│ │ ├── universalify@0.2.0 (4.67kb, 4 files, ©MIT)
│ │ ╰─┬ url-parse@1.5.10 (2 deps, 76.64kb, 18 files, ©MIT)
│ │ ├── querystringify@2.2.0 (6.8kb, 4 files, ©MIT)
│ │ ╰── requires-port@1.0.0 (8.36kb, 7 files, ©MIT)
│ ├─┬ w3c-xmlserializer@4.0.0 (1 dep, 30.79kb, 10 files, ©MIT)
│ │ ╰── xml-name-validator@4.0.0 (🔗, 13.23kb, 4 files, ©Apache-2.0)
│ ├── webidl-conversions@7.0.0 (23.67kb, 4 files, ©BSD-2-Clause)
│ ├─┬ whatwg-encoding@2.0.0 (2 deps, 394.2kb, 46 files, ©MIT)
│ │ ╰─┬ iconv-lite@0.6.3 (1 dep, 381.66kb, 40 files, ©MIT)
│ │ ╰── safer-buffer@2.1.2 (41.31kb, 7 files, ©MIT)
│ ├── whatwg-mimetype@3.0.0 (16.42kb, 8 files, ©MIT)
│ ├─┬ whatwg-url@11.0.0 (3 deps, 359.1kb, 33 files, ©MIT)
│ │ ├─┬ tr46@3.0.0 (1 dep, 242.95kb, 12 files, ©MIT)
│ │ │ ╰── punycode@2.3.1 (🔗, 32.73kb, 5 files, ©MIT)
│ │ ╰── webidl-conversions@7.0.0 (🔗, 23.67kb, 4 files, ©BSD-2-Clause)
│ ├── ws@8.18.0 (143.21kb, 19 files, ©MIT)
│ ╰── xml-name-validator@4.0.0 (13.23kb, 4 files, ©Apache-2.0)
├── lodash@4.17.21 (1.35mb, 1054 files, ©MIT)
╰─┬ ts-jest@29.1.5 (33 deps, 3.8mb, 531 files, ©MIT)
├─┬ bs-logger@0.2.6 (1 dep, 63.26kb, 42 files, ©MIT)
│ ╰── fast-json-stable-stringify@2.1.0 (🔗, 16.56kb, 18 files, ©MIT)
├── fast-json-stable-stringify@2.1.0 (16.56kb, 18 files, ©MIT)
├─┬ jest-util@29.7.0 (25 deps, 2.97mb, 304 files, ©MIT)
│ ├── @jest/types@29.6.3 (🔗, 15 deps, 2.7mb, 220 files, ©MIT)
│ ├── @types/node@20.14.9 (🔗, 1 dep, 2.06mb, 100 files, ©MIT)
│ ├─┬ chalk@4.1.2 (5 deps, 95.08kb, 33 files, ©MIT)
│ │ ├─┬ ansi-styles@4.3.0 (2 deps, 49.67kb, 16 files, ©MIT)
│ │ │ ╰─┬ color-convert@2.0.1 (1 dep, 33.09kb, 11 files, ©MIT)
│ │ │ ╰── color-name@1.1.4 (6.54kb, 4 files, ©MIT)
│ │ ╰─┬ supports-color@7.2.0 (1 dep, 11.19kb, 10 files, ©MIT)
│ │ ╰── has-flag@4.0.0 (4.32kb, 5 files, ©MIT)
│ ├── ci-info@3.9.0 (25.45kb, 7 files, ©MIT)
│ ├── graceful-fs@4.2.11 (31.77kb, 7 files, ©ISC)
│ ╰── picomatch@2.3.1 (87.84kb, 10 files, ©MIT)
├── json5@2.2.3 (229.69kb, 20 files, ©MIT)
├── lodash.memoize@4.1.2 (19.65kb, 4 files, ©MIT)
├── make-error@1.3.6 (12.14kb, 6 files, ©ISC)
├── semver@7.6.2 (93.19kb, 52 files, ©ISC)
╰── yargs-parser@21.1.1 (125.46kb, 11 files, ©ISC)
Currently the Studio footer depends on the entire lodash library. This pulls in significantly more code than we need, as we only use the
isEmpty
function.We should replace the
lodash
dependency with thelodash.isEmpty
library; this will take a decently sized chunk out of the bundle sizes of our MFEs.