Задаёшь в entry столько элементов, сколько нужно. Потом в output задаёшь filename с подстановкой имени нужного entry. Entry со всеми зависимостями добавляешь в CommonsChunkPlugin, чтобы они не дублировались в entry исходников приложения. Типа того:
entry: {
app: './src/app.js',
vendor: ['lib1', 'lib2', ... ] // перечисляем тут все зависимости, которые нужно вынести в отдельный файл
},
output: {
filename: '[name].js?[chunkhash:6]' // получаем 2 файла: app.js, vendor.js
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({ // убираем дубли зависимостей из app.js
names: ['vendor']
}
]
Ну и дальше по необходимости шатать конфиги entry и CommonsChunkPlugin, про них всё подробно в документации webpack расписано.