I think require.ensure might be the key here. That will allow you to set up split points for dynamic loading. You would connect it with the router of your SPA in some way. Here's the basic idea from Pete Hunt: https://github.com/petehunt/webpack-howto#9-async-loading .