Web components do a lot to alleviate this problem. You get a basic reusable component model in the browser with no framework, and without requiring first jumping into the world of npm/bower.<p>The vanilla JS example is barely longer with web components, and will be much easier to understand once it gets even mildly interesting:<p><pre><code> <html>
<head>
<script>
class HelloWorld extends HTMLElement {
constructor() {
this.attachShadow().innerHTML = '<h1>"Hello, world!"</h1>';
}
}
customElements.defineElement('hello-world', HelloWorld);
</script>
</head>
<body>
<hello-world></hello-world>
</body>
</html></code></pre>
Besides overengineered apps, problem is that people start learning frameworks and libraries instead of learning how javascript itself works. They are so excited by the new tool/toy that they fail to realize that the same thing can be achieved in much simpler and more efficient way.