親愛なるハブロフチアン! 最近、私たちのチームで、サーバーレンダリングを含むVue.jsフレームワークの使用を開始しましたが、その後、特にプログラマーとしての多くの問題に遭遇しました。
サイトのレイアウトの変更は、私を通して発生しました。 タイトルを変更するか、ブロックの場所を変更するかに関わらず、htmlコードの一部が投げ出された後、この部分を必要なコンポーネントに挿入し、必要な変数とメソッドを置き換え、webpackを実行し、コードをサーバーにアップロードする必要がありました。
サーバー上で監視モードでwebpackを使用するか、同僚に必要なコマンドのリストを提供することができますが、同僚にとってはやや困難です。
そのため、サーバーからデータを取得して、テンプレートの動的な読み込みを行うことにしました。
例として、このアプローチの単純化されたバージョンを検討してください。
構造は次のとおりです。
- public / -静的ファイルを含むディレクトリ
- templates / -コンポーネントテンプレートを含むディレクトリ
- サーバー/ -サーバー部品コード
- app / -Vueアプリケーションコード
- client.js -Vueアプリケーションのクライアント部分のエントリポイント
- serverEntry.js -Vueアプリケーションのサーバー側のエントリポイント
コンポーネントでテンプレートのプリロードを使用するには、サーバーからデータが受信されるのを待つ必要がありますが、Promisは完璧です。 その結果、Vueコンポーネントの2つのラッパーを取得しました。
wrapComponent -Vueコンポーネントのグローバル登録用
wrapPageComponent -Vueコンポーネントを返します。
以下で使用するコードのほとんどは、サーバーレンダラーvue.js(
ssr.vuejs.org )の公式ドキュメントから取得されているため、これについては詳しく説明しません。
KoaJSはサーバーフレームワークとして使用されますが、他のものを使用することも、まったく使用しないこともできます。
次に、Vueアプリケーションのサーバーエントリポイントについて考えてみましょう。すべてがシンプルで、アプリケーションが生成されるのを待って結果を返します。 将来、このエントリポイントはルーティング、ストレージなどによって拡張されます。
クライアントエントリポイントでも同じことが起こります
そして最後に、Vueアプリケーション自体に到達しました。
そして、直接、Vueコンポーネント自体はラッパーにラップされます(トートロジーについてはごめんなさい)。
そして、
パブリック/テンプレート/にあるこれらのコンポーネントに対応する
テンプレート <div> <main-menu></main-menu> <main-content></main-content> </div>
<nav> <ul> <li class="logo">{{title}}</li> </ul> </nav>
<div> <h1 @click="clickHandle()">{{name}}</h1> </div>
以上です。 これで、すべてのテンプレートがサーバーから読み込まれます。同僚に対して、このテンプレートまたはそのテンプレートで置き換えることができる変数とメソッドのリストを提供できます。私のメソッドへの参加は、新しいメソッドと変数の追加と、htmlテンプレートでの最小限の作業に限定されます。 また、v-show、v-if、v-forディレクティブの使用を説明する方がはるかに簡単であることが判明しました。
ご清聴ありがとうございました!