I used to struggle with this, until I realized what’s really going on. To do conventional web development, you have to download a zillion node modules so you can:
- Build one or more “transpilers” (e.g. Typescript, Sass support, JSX)
- Build linters and other SAST/DAST tooling
- Build packaging tools, to bundle, tree-shake, and minify your code
- Use shims/glue to hold all that together
- Use libraries that support the end product (e.g. React)
- Furnish multiple versions of dependencies in order for each tool to have its own (stable) graph
All this dwarfs any code you’re going to write by multiple orders of magnitude. I once had a node_modules tree that clocked in at over 1.5GB of sourcecode. What I was writing would have fit on a floppy-disk.
That said, it’s kind of insane. The problem is that there’s no binary releases, nor fully-vendored/bundled packages. The entire toolchain source, except nodejs and npm, is downloaded in its entirety, on every such project you run.
In contrast, if you made C++ or Rust developers rebuild their entire toolchain from source on every project, they’d riot. Or, they would re-invent binary releases that weekend.
Boy do i have news concerning rust :p