vue-router webpackでページごとにファイルを分割する
vue-router
でシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjs
ファイルのファイルサイズもどんどん増えていきます。
ページごとにファイルを分割し、そのページがアクセスされたタイミングでそのjs
ファイルを読み込むようにすれば最初のロード時間を短縮できます。
一見実装が難しそうですが、vue-router
とwebpack
を使えば簡単に実現できます。
以下の説明の開発環境やフォルダ構成はvue-routerを導入してSPAを作成するで扱ったものと同様とします。
router.jsの修正
コンポーネントの読み込み方法を以下のように設定します。
router.js
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
const routes = [
{ path: '/', component: resolve => {
require.ensure(['js/pages/Top.vue'], () => {
resolve(require('js/pages/Top.vue'));
}, 'top');
} },
{ path: '/about', component: resolve => {
require.ensure(['js/pages/About.vue'], () => {
resolve(require('js/pages/About.vue'));
}, 'about');
} },
{ path: '/contact', component: resolve => {
require.ensure(['js/pages/Contact.vue'], () => {
resolve(require('js/pages/Contact.vue'));
}, 'contact');
} }
];
const router = new VueRouter({
routes,
mode: 'history'
});
export default router;
webpack.config.jsの修正
上記のように設定するとファイルが分割されますが、分割されたファイル名や出力パスをwebpack.config.js
で設定します。
webpack.config.js
output: {
path: __dirname + '/public',
publicPath: '/',
filename: 'js/app.js',
chunkFilename: 'js/[name].chunk.js'
}
実行
ビルドをするとメインのapp.js
と同じ場所にtop.chunk.js
とabout.chunk.js
とcontact.chunk.js
のファイルが作成されます。
実際にトップページにアクセスしてみると、app.js
とtop.chunk.js
が読み込まれ、about
ページに遷移するタイミングでabout.chunk.js
が読み込まれ、contact
ページに遷移するタイミングでcontact.chunk.js
が読み込まれることを確認できます。