Nuxt の最新バージョン (2.14) では、コードが変更されていない場合にアプリをビルドするための最適化が導入されました (ビルド時間を大幅に改善するため)。
私は jamstack で Web サイトを作成し、 と を使用して netlify にデプロイしてきましたnuxt generate
が、これまでは を使用していましたtarget: 'server'
。この新しい機能を活用するために新しい を試しましたが、このモードではアプリが にアクセスして動的なページを生成できないため、target: 'static'
コードがビルドされません。this.$route
それで、私の質問は、これらは互いにどう違うのかということです。何target
に切り替えるときに注意を払う必要があるのでしょうか?
ベストアンサー1
アップデート:
による最新のドキュメント、mode: 'universal'
および は廃止され、および がmode: 'spa'
推奨されるようになりました。ssr: true
ssr: false
target: 'static'
完全な静的 は、 およびssr: true
(非推奨の に対応するmode: 'universal'
)でのみ機能します。 はssr: true
デフォルト値です。 はssr: false
非推奨の に対応するものでありmode: 'spa'
、 では使用できませんtarget: 'static'
。
元の回答:
目標
target
不動産を次のように考えると役に立つかもしれない。ホスティング環境target: 'server'
- サーバーが必要かどうか、またはCDNによって提供される静的ファイルでシナリオに十分かどうか。アプリがサーバー側でレンダリングされるわけではない(mode
下記をご覧ください)。
ターゲットを運用環境で使用する場合static
、静的ファイルを提供する CDN だけが必要です。これらの静的ファイルはビルド時に準備され、「最終版」となります (コンテンツまたはコードが更新された次のビルドまで)。このシナリオでは、サーバーは必要ありません (CI パイプラインに含まれる可能性のある CDN とビルド サーバーを除く)。
ターゲットとモード
一方、server
ターゲットを使用する場合、本番アプリには、クライアントのリクエストに対する応答が構成され送信されるサーバー環境が必要になります。つまり、更新されたコンテンツでは、アプリを再構築する必要はありません。このコンテンツは、サーバーが要求された後に構成されます。これは、 -モードuniversal
とspa
モードの両方に適用されます。 モードではuniversal
、アプリはサーバー側でレンダリングされます。これに対して、 モードでは、サーバーspa
側でのレンダリングはなく (クライアント側でのナビゲーションのみ)、アプリ全体がシングル ページ アプリケーションとして実行されます。
サーバーと静的ターゲット
初心者にとって、サーバー側レンダリングを使用するか静的レンダリングを使用するかを決めるのは少し難しいかもしれません。決定を下すのに役立つ良い質問は、さまざまなユーザー/状況に対して、各ページ/ドキュメント/コンテンツ項目に異なるコンテンツを提供する必要があるかどうかです。必要な場合は、おそらくターゲット を使用しserver
、そうでない場合は を使用しますstatic
。
これらのアプローチにはそれぞれ、サーバー要件、セキュリティ、速度、CI パイプライン/ビルド プロセス、SEO、価格などの長所と短所があります。適切な選択はユースケースによって異なります。
おっしゃるとおり、バージョンからは2.13
2 つのデプロイメント ターゲットが利用可能です。それらはserver
とですstatic
。ソース
従来のアプローチには、主にクライアントがナビゲーション用のAPIasyncData
とfetch
関数をリクエストする際に問題や困難がありました。その結果、生成されたサイトはまったく静的ではありませんでした。従来のアプローチの欠点はすべて説明されています。ここ。
新しいターゲット (および同時にstatic
必須モード) アプローチでは、コマンドはすべての HTML ページを事前レンダリングし、非同期データ要求をモックします。これは古いもので、今回はクライアントから API を要求しません。これはビルド時にすでに実行されています。universal
nuxt generate
asyncData
fetch
ソース
ルートについて。上記のルートはおそらく nuxt のクローラーによって自動的に検出されないため、generate.routes
プロパティを使用して手動で生成する必要があります。
import axios from 'axios'
export default {
generate: {
routes() {
return axios.get('https://my-api/users').then(res => {
return res.data.map(user => {
return '/users/' + user.id
})
})
}
}
}