Node, ES6, NPM, React, Angular 2.0, Mocha, Chai, Closures, Prototype, Classes, Require, Bowserify, WebPack, SystemJS, Exports, modules, package managers - the list is long and distinguished.
Are you feeling fatigued already?
Beginnings of Madness
So what is all this madness and where has it come from you might ask. Part of the answer comes from it’s bad design and a fragmented ecosytem. JS is one language that has no native built in support for modules - on a language level there is a distinct problem and it’s the fact that you have to know the three, four, five different ways to do something. If you want to author a library, you’d need to let your users consume your code in different environments and you’ll always get into a situation where someone or other will complain about the portability of your code. On the bright side however if someone desperately wants your code, they’ll find a way to consume it.
On an API level things play much nicer where packages contain small bytes of code and you have reasonable amounts of choice and control whilst developing. NPM has thousands and thousands of modules for us to achieve what is missing in the core of the language - need extensive array or string methods, no problem. Awesome.
Here’s the rub: the applications that you will be working on throughout your career will most likely fall between 4,000 - 6,000 lines of code. If you’ve already started with a full React stack, chances are in the real world you have already over-engineered your application. Most of the tools that we use you really don’t even need, and if you’re not savvy with those tools chances are that they will cause you more problems instead of solving the problems you set out to solve in the first place.
On the bright side the community has taken up the transition to ES6 and the web is abundant with tutorials, opinions and resources to learn. ES6 featurees will eventually be implemented by a significant enough base for actual use - the question is simplly when that will happen. Edge has already implemented an exprimental flag for modules and common syntax can be found in Firefox and Chrome already (minus modules of course!).