Next.jsアプリケーションの静的エクスポートを作成する方法
Next.jsは、静的サイトまたはシングルページアプリケーション(SPA)として開始し、後でサーバーを必要とする機能を使用するようにオプションでアップグレードできます。
next build を実行すると、Next.js はルートごとに HTML ファイルを生成します。厳密な SPA を個別の HTML ファイルに分割することで、Next.js はクライアントサイドで不要な JavaScript コードを読み込むのを回避でき、バンドルサイズを縮小し、ページロードを高速化できます。
Next.jsは静的エクスポートをサポートしているため、HTML/CSS/JS静的資産を配信できる任意のWebサーバーにデプロイおよびホストできます。
設定
静的エクスポートを有効にするには、next.config.js内の出力モードを変更します。
/**
* @type {import('next').NextConfig}
*/
const nextConfig = {
output: 'export',
// Optional: Change links `/me` -> `/me/` and emit `/me.html` -> `/me/index.html`
// trailingSlash: true,
// Optional: Prevent automatic `/me` -> `/me/`, instead preserve `href`
// skipTrailingSlashRedirect: true,
// Optional: Change the output directory `out` -> `dist`
// distDir: 'dist',
}
module.exports = nextConfignext buildを実行すると、Next.jsはアプリケーションのHTML/CSS/JSアセットを含むoutフォルダを作成します。
getStaticPropsとgetStaticPathsを使用して、pagesディレクトリ内の各ページ(または動的ルートの場合はさらに多く)のHTMLファイルを生成できます。
サポートされている機能
静的サイトを構築するために必要なコアNext.js機能のほとんどは、次のようにサポートされています。
getStaticPathsを使用した動的ルートnext/linkによるプリフェッチ- JavaScriptのプリロード
- 動的インポート
- 任意のスタイリングオプション(例:CSS Modules、styled-jsx)
- クライアントサイドデータフェッチ
getStaticPropsgetStaticPaths
画像最適化
Image Optimizationはnext/imageを介して、next.config.jsでカスタムイメージローダーを定義することで静的エクスポートとともに使用できます。たとえば、Cloudinaryのようなサービスで画像を最適化できます。
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'export',
images: {
loader: 'custom',
loaderFile: './my-loader.ts',
},
}
module.exports = nextConfigこのカスタムローダーは、リモートソースから画像をフェッチする方法を定義します。たとえば、次のローダーはCloudinaryのURLを構築します。
export default function cloudinaryLoader({
src,
width,
quality,
}: {
src: string
width: number
quality?: number
}) {
const params = ['f_auto', 'c_limit', `w_${width}`, `q_${quality || 'auto'}`]
return `https://res.cloudinary.com/demo/image/upload/${params.join(
','
)}${src}`
}その後、アプリケーションでnext/imageを使用し、Cloudinaryの画像への相対パスを定義できます。
import Image from 'next/image'
export default function Page() {
return <Image alt="turtles" src="/turtles.jpg" width={300} height={300} />
}サポートされていない機能
Node.jsサーバーを必要とする機能、またはビルドプロセス中に計算できない動的なロジックはサポートされて**いません**。
- 国際化ルーティング
- APIルート
- リライト
- リダイレクト
- ヘッダー
- プロキシ
- 増分静的再生
- デフォルトの
loaderを使用したImage Optimization - ドラフトモード
fallback: trueを使用したgetStaticPathsfallback: 'blocking'を使用したgetStaticPathsgetServerSideProps
デプロイ
静的エクスポートを使用すると、Next.jsはHTML/CSS/JS静的資産を配信できる任意のWebサーバーにデプロイおよびホストできます。
next buildを実行すると、Next.jsは静的エクスポートをoutフォルダに生成します。たとえば、次のルートがあるとします。
//blog/[id]
next buildを実行すると、Next.jsは次のファイルを生成します。
/out/index.html/out/404.html/out/blog/post-1.html/out/blog/post-2.html
Nginxのような静的ホストを使用している場合は、着信リクエストから正しいファイルへのリライトを設定できます。
server {
listen 80;
server_name acme.com;
root /var/www/out;
location / {
try_files $uri $uri.html $uri/ =404;
}
# This is necessary when `trailingSlash: false`.
# You can omit this when `trailingSlash: true`.
location /blog/ {
rewrite ^/blog/(.*)$ /blog/$1.html break;
}
error_page 404 /404.html;
location = /404.html {
internal;
}
}バージョン履歴
| バージョン | 変更履歴 |
|---|---|
v14.0.0 | next exportは、"output": "export"に置き換えられました。 |
v13.4.0 | App Router(安定版)は、React Server ComponentsやRoute Handlersの使用を含む、強化された静的エクスポートサポートを追加します。 |
v13.3.0 | next exportは非推奨になり、"output": "export"に置き換えられました。 |
役に立ちましたか?