Vueシングルページアプリケーションの事前レンダリング方法の例

Vueシングルページアプリケーションの事前レンダリング方法の例

序文

vue-cli でパッケージ化されたプロジェクトは、一般的に spa プロジェクトです。ご存知のとおり、シングルページ アプリケーションは SEO に適していません。解決策としては、ssr (サーバー側レンダリング) と事前レンダリングの 2 つがあります。ここでは、事前レンダリングについてのみ説明します。

vue-cli 2.0 バージョン

インストール

npm インストール prerender-spa-plugin --save

webpack.prod.conf.jsにコードを追加する

定数パス = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin') // プラグインをインポート const Renderer = PrerenderSPAPlugin.PuppeteerRenderer

プラグイン:[
	// PrerenderSPAPlugin を構成する
    新しいプリレンダリングSPAPlugin({
      // 生成されたファイルのパスは、webpakc によってパッケージ化されたパスと一致する場合もあります。
      staticDir: path.join(__dirname, '../dist'),
      
      // 独自のルーティング ファイルに対応して、たとえば、インデックスにパラメーターがある場合は、/index/param1 のように記述する必要があります。
      ルート: ['/', '/report','/genius','/index/param1'],
      // 必ず記述してください。このセクションが設定されていない場合、プリコンパイルは実行されません。renderer: new Renderer({
          注入:
            foo: 'バー'
          },
          ヘッドレス: 偽、
          // main.js の document.dispatchEvent(new Event('render-event')) では、2 つのイベント名が対応している必要があります。
          renderAfterDocumentEvent: 'レンダリングイベント'
      })
    })
]

main.jsに追加する

新しいVue({
  el: '#pingce',
  ルーター、
  店、
  コンポーネント: { アプリ },
  テンプレート: '<App/>',
  // マウントを追加します。そうしないと、プリコンパイルは実行されません。mounted() {
    document.dispatchEvent(新しいイベント('render-event'))
  }
})

router.js でモードを「history」に設定する

npm run build を実行し、生成された dist ディレクトリに各ルート名に対応するフォルダーがあるかどうかを確認します。次に、ディレクトリ内の index.html を見つけて IDE で開き、ファイルに必要なコンテンツが含まれているかどうかを確認します。

設定するルートごとにフォルダーが生成され、各フォルダーの下に index.html が生成されます。

vue-cli 3.0 バージョン

3.0 cli は、2.0 のビルド ディレクトリと config ディレクトリを削除して、はるかにシンプルになっています。では、webpack 構成をどのように変更すればよいのでしょうか?

ルートディレクトリに vue.config.js を作成し、設定を行います。

インストール

npm インストール prerender-spa-plugin --save

vue-config.jsに追加する

const PrerenderSPAPlugin = require('prerender-spa-plugin'); // プラグインをインポート const Renderer = PrerenderSPAPlugin.PuppeteerRenderer;
定数パス = require('path');
モジュール.エクスポート = {
    Webpack の設定: config => {
        process.env.NODE_ENV !== 'production' の場合、戻り値は次のようになります。
        戻る {
            プラグイン: [
                新しいプリレンダリングSPAPlugin({
                    // 生成されたファイルのパスは、webpakc によってパッケージ化されたパスと一致する場合もあります。
                    // このディレクトリには 1 つのレベルしか存在できません。ディレクトリ レベルが 1 レベルを超える場合、生成中にエラー プロンプトは表示されず、事前レンダリング中に停止するだけです。
                    staticDir: path.join(__dirname,'dist'),
                    // 独自のルーティング ファイルに対応して、たとえば about にパラメーターがある場合は、/about/param1 のように記述する必要があります。
                    ルート: ['/', '/product', '/about'],
                    //設定しないとプリコンパイルが実行されませんrenderer: new Renderer({
                        注入: {
                            foo: 'バー'
                        },
                        ヘッドレス: 偽、
                        // main.js の document.dispatchEvent(new Event('render-event')) では、2 つのイベント名が対応している必要があります。
                        renderAfterDocumentEvent: 'レンダリングイベント'
                    })
                })、
            ]、
        };
    }
}

main.jsに追加する

新しいVue({
  ルーター、
  店、
  レンダリング: h => h(App),
  // vue-config.js の renderAfterDocumentEvent の名前: 'render-event' は、mounted() { に対応している必要があります。
    document.dispatchEvent(新しいイベント('render-event'))
  }
}).$mount('#app')

router.js でモードを「history」に設定する

npm run build を実行し、生成された dist ディレクトリに各ルート名に対応するフォルダーがあるかどうかを確認します。

要約する

1. ルーティングには履歴モードを使用するのが最適です。履歴モードを使用せずに生成されたファイルを実行することもできますが、各 index.html ファイルの内容は同じです。

2. 3.0 の設定は 2.0 とほぼ同じですが、注意が必要な箇所がいくつかあります。

2.0ではstaticDirを設定します: path.join(__dirname,'../dist')

3.0ではstaticDirを設定します: path.join(__dirname,'dist')

これら 2 つの設定が間違っている場合、npm run build を実行するとエラーが報告されます。

各ページのタイトルやメタ情報を設定する場合は、[vue-meta-info]を使用することをお勧めします。

Vue シングルページ アプリケーションの事前レンダリングに関するこの記事はこれで終わりです。Vue シングルページ アプリケーションの事前レンダリングに関する関連コンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • vue-cli シングルページ事前レンダリング seo-prerender-spa-plugin 操作

<<:  Virtualbox に Centos7 仮想マシンをインストールする詳細なグラフィック チュートリアル

>>:  初心者のためのWebページ作成: HTMLのハイパーリンクAタグの使い方を学ぶ

推薦する

Tomcatの動作原理を分析する

SpringBoot は巨大な Python のようで、ゆっくりと私たちの周りを巻きつき、麻痺させま...

offsetWidth、clientWidth、scrollWidth、scrollTop、scrollLeft などのプロパティの図。

注 1: 上の画像の背景全体がこの Web ページのフルサイズであり、中央の小さなボックスがブラウザ...

MySQL クエリ キャッシュとバッファ プール

1. キャッシュ - クエリキャッシュ次の図は、MySQL 公式サイトから提供されています: MyS...

Ubuntu 16.04 にソースコードから Mininet をインストールする

ミニネットMininet は軽量のソフトウェア定義ネットワークおよびテスト プラットフォームです。軽...

VueはExcelデータをエクスポートするパブリック関数メソッドをカプセル化します

vue+element UI は Excel データをエクスポートするためのパブリック関数をカプセル...

Web Storage APIの使用に関する簡単な説明

目次1. ブラウザのローカルストレージ技術1.1、セッションストレージ1.2、ローカルストレージ2....

Ubuntu Linuxシステムをインストールするときにハードディスクをパーティション分割する最も合理的な方法の詳細な説明

Windows または Linux オペレーティング システムをインストールするかどうかに関係なく、...

<td></td> タグの境界線スタイルがブラウザに表示されない問題の解決方法

質問: 360ブラウザの互換モードなど、一部のブラウザでは、 <td style="...

MySQL でスロークエリログを有効にする方法

1.1 はじめにスロークエリログを有効にすると、MySQL は指定された時間を超えるクエリステートメ...

Ajax の JavaScript ソリューションにおける parsererror エラー ケースの詳細な説明

ajax の parsererror エラー (バックグラウンドからフロントエンドに送信される js...

動的な背景グラデーション効果を実現するCSS3

CSS3 を学ぶということは、新しい機能と基本的な理論に慣れることを意味します。この記事では、ケー...

組み込み Linux 開発環境で ping と nfs を構築するためのソリューション

1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...

MySQL データ挿入効率の比較

データを挿入するとき、以前オフィス システムに取り組んでいたときにはデータベースのパフォーマンスにつ...

WeChatアプレットのスクロールビューが左右の連動を実現

この記事では、WeChatアプレットのスクロールビューの左右連動を実現するための具体的なコードを参考...

CSS の両端揃えを実現する div+css レイアウトの 4 つの方法の概要

2 端揃えを実現する div+css レイアウトは、Web ページの組版でよく使用されます。この記事...