Ideally we want composable, encapsulated, reusable components (widgets), typechecked (with a static analyzer) and compiled (transpilled) into a "cross-browser" JS5.
cat app.js | typescript | google-closure-compiler | minifier | packer > single-highly-optimized-file.js
use strict; is OK) so let's use tools as much as possible. Everything which could be automated must be automated. Everything which could be checked and tested must be checked and tested.
In reality everything is a constantly changing cryptic bloated mess. Java EE looks like an innocent game compared to 980 dependencies of
Angular5 loads 3 separate JS files from a CDN, while
angular-material2 adds another two and dependencies.
Vue is still a single-file framework (for how long?) with a compact single-file components.
The idea is that one should turn to these "implementation" frameworks when the overall design is already well-defined.
Server-side templating should be prefered to a client-side JS templating. As much as possible should be rendered on the server side.