I've recently set up a project with server and browser JS (and some shared things), having both bundled by Webpack and just NPM scripts to glue everything together. It's nice to have a single powerful tool that can handle pretty much all of your bundling and transpiling needs, the mental overhead gets smaller that way.
https://gist.github.com/Ambroos/8299d0c0d322cd3a736d
As most complex things in Webpack do, it still feels like a hack at first.
Using simply /^(?!\.|\/).+/i in externals is way easier than scanning the filesystem for module names and usually more reliable. You simply assume that everything that is accessed with a relative path is local, and everything else is an external module. Add libraryTarget: 'commonjs' to tell Webpack to simply use classic requires for externals and to bundle everything up in the end, and you're done. Add loaders and plugins to your own preference.
You end up with one giant Javascript file that, when ran through Node, does exactly what you expect it to (but still requires NPM dependencies externally, so you can't 'just' use the bundled file without npm install).