Последний vue-clie на webpack 2.x из коробки поддерживает code splitting. На выходе получается vendor.js (библиотеки из node_modules), app.js. Также посмотри в сторону lazy loading components. То есть можно модалки например, или другие компоненты не грузить вообще если нет надобности. То есть на модалку вещаете директиву v-if и компонент подключаете так:
components: {
Modal: () => import('components/modal.vue');
}
При этом компонент на выходе будет лежать в отдельном файле и не загрузится до того, пока не отработает v-if.
Если без v-if, то компонент загрузится асинхронно во время загрузки страниц.
Я например, гружу так страницы через vue-router, асинхронно.