The final solution can seem like the best solution, but it also seems mind blowingly complicated. For smaller things Solution 2 can be absolutely fine.
No need for extra middleware if you use Koa.
Why not name the main entry point `src/index.js`? It is the default entry point for Webpack 4, works out of the box.
It was written for Webpack 2 back then. With Webpack 4 it should work out of the box.
The title is misspelled: fist -> first
How did you handle the free dyno hours at Heroku? UptimeRobot will eat it up.
Why not use Babel preset env instead of es2015?
I would also mention putting template into a separate file and importing it as a string.
Checked it’s documentation, but it doesn’t support ES2015 yet. Have to use harmony branch for that.
Basic function based shaking is working there, but classes remain, because they are transpiled down to ES5 in the Angular code base. This is why Rollup performs better, it can handle these scenarios.