zukucode
主にWEB関連の情報を技術メモとして発信しています。

vue-router webpackでページごとにファイルを分割する

vue-routerでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。

ページごとにファイルを分割し、そのページがアクセスされたタイミングでそのjsファイルを読み込むようにすれば最初のロード時間を短縮できます。

一見実装が難しそうですが、vue-routerwebpackを使えば簡単に実現できます。

以下の説明の開発環境やフォルダ構成は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.jsabout.chunk.jscontact.chunk.jsのファイルが作成されます。

実際にトップページにアクセスしてみると、app.jstop.chunk.jsが読み込まれ、aboutページに遷移するタイミングでabout.chunk.jsが読み込まれ、contactページに遷移するタイミングでcontact.chunk.jsが読み込まれることを確認できます。


関連記事

  • vue-router webpackでページごとにファイルを分割する

    vue-routerでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。ページごとにファイルを分割し、そのページがア...


  • webpack lessをImportしてビルドする

    htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装して、スタイルをサイト全体に適用したい場合があります。外部のlessファイルをモジュールとしてImportしてwebpack...


  • webpack モジュールのパスを絶対パスで指定する方法

    自分で作成したモジュールをインポートするときはインポートするファイルを基準に相対パスで指定する必要があります。フォルダ構成によっては深く階層を辿らないといけないので、フォルダ構成が変わってしまうと大変...


  • vueコンポーネントでvue-routerのページ制御を行う

    vueコンポーネントの処理でvue-routerのページ制御を行う方法を紹介します。vue-routerでページ遷移するときはrouter-linkのコンポーネントを使うことが多いですが、コンポーネン...


  • vueファイル(単一ファイルコンポーネント)をwebpackでビルド

    vueファイル(単一ファイルコンポーネント)をwebpackでビルドする手順を紹介します。バージョンは、Vue.jsは2.x、webpackは2.xです。わかりやすくするため、空のプロジェクトから出来...


  • Vue.js lessを使いwebpackでビルドする

    .vueファイル(単一ファイルコンポーネント)のstyleをcssではなくlessで実装して、webpackでビルドをします。vue-loaderのオプションにlessのloaderを追加します。


  • webpack-dev-serverで開発サーバーを起動する

    webpack-dev-serverで開発サーバーを起動します。vueファイル(単一ファイルコンポーネント)をwebpackでビルドページで紹介したwebpack.config.jsにdevServe...


  • vue-routerを導入してSPAを作成する

    Vue.jsのプロジェクトにvue-routerを導入してシングルページアプリケーション(spa)を作成します。最初にvue-routerのパッケージをインストールします。router-linkはナビ...


  • vue-router 現在のパスによってスタイルを変更する

    vue-routerでシングルページアプリケーションを作成する際に、例えばヘッダやサイドバーのナビゲーションで現在表示しているページのリンクを無効にしたり色を変えたりしたい場合があります。vue-ro...


  • Vue.js webpackでHot Module Replacementを行う

    開発を効率化するために、Hot Module Replacement(HMR)の設定を行います。Hot Module Replacementを設定しておけば、ブラウザの再読込は行わず、修正した箇所のみ...