You typical Node project
-
Why not import all code ever created by human kind just in case we might need some of it.
...and then we can grind all the code ever created by human kind into a fine paste, and write a clever algorithm to regurgitate it as a squishy code slurry in response to questions about problems that the standard libraries already solved.
-
"Yes, I'd like a wheel. I don't want to invent it. Why, of course, give me the full package of wheel, axis, rotor, engine, fuel tank, windshield, mirrors, tire, front panel, brakes. This wheel will be great for me manually spinning cotton!"
wrote last edited by [email protected]And I have the option to spin cotton off-road on rugged terrain...so there's that...
-
You say that, but I've watched the JS community move from one framework and tool suite to the next quite rapidly. By my recollection, I've seen a wholesale change in popular tooling at least four times in the last decade. Granted, that's not every developer's trajectory through all this, but (IMO) that's still a lot.
But changing frameworks is not why node_modules is so large. You don’t import Angular and Vue.
-
The problem is "I need function, library with 1000 functions has function, include." Library's 823rd function turns out to have a vulnerability.
Enter tree-shaking.
-
And this is why tree shaking exists.
I feel like the end result of tree shaking would be the image here https://fedia.io/m/[email protected]/t/2547352/CSS-Gardening
-
Feels like a lot of “not inventing the wheel” - which is good? There are plenty of good wheels out there.
Is this why pip packages are called wheels...?
-
I feel like the end result of tree shaking would be the image here https://fedia.io/m/[email protected]/t/2547352/CSS-Gardening
Gotta fix that link
-
But changing frameworks is not why node_modules is so large. You don’t import Angular and Vue.
I agree. Rather each one of those is rather substantial on its own. Plus the churn of going from framework to framework makes it less useful to compress and bundle all this stuff into fixed versions on a slower schedule (e.g. like Ubuntu packages do). I think that all contributes to bloat.
-
Because we're monkeys
We ARE all apes
-
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