exportPathMap (Deprecated)
この機能は
next export
に限定されており、現在はpages
でのgetStaticPaths
またはapp
でのgenerateStaticParams
を使用することが推奨されています。
exportPathMap
を使用すると、エクスポート時に使用するリクエストパスとページの対応づけを指定できます。exportPathMap
で定義されたパスはnext dev
を使用した際にも利用できます。
例を見てみましょう。次のページを持つアプリのカスタムexportPathMap
を作成します:
pages/index.js
pages/about.js
pages/post.js
next.config.js
を開き、次のexportPathMap
設定を追加します:
module.exports = {
exportPathMap: async function (
defaultPathMap,
{ dev, dir, outDir, distDir, buildId }
) {
return {
'/': { page: '/' },
'/about': { page: '/about' },
'/p/hello-nextjs': { page: '/post', query: { title: 'hello-nextjs' } },
'/p/learn-nextjs': { page: '/post', query: { title: 'learn-nextjs' } },
'/p/deploy-nextjs': { page: '/post', query: { title: 'deploy-nextjs' } },
}
},
}
Good to know:
exportPathMap
内のquery
フィールドは、自動的に静的最適化されたページやgetStaticProps
ページと一緒には使用できません。これらはビルド時にHTMLファイルとしてレンダリングされ、next export
中に追加のクエリ情報を提供できないためです。
その後、ページはHTMLファイルとしてエクスポートされます。例えば、/about
は/about.html
になります。
exportPathMap
は2つの引数を受け取るasync
関数です:1つ目はNext.jsが使用するデフォルトのマップdefaultPathMap
です。2つ目の引数は次のオブジェクトです:
dev
- 開発中にexportPathMap
が呼び出されるとtrue
。next export
を実行中はfalse
。開発中にはexportPathMap
はルートを定義するために使用されます。dir
- プロジェクトディレクトリへの絶対パスoutDir
-out/
ディレクトリへの絶対パス(-o
で設定可能)。dev
がtrue
の場合、outDir
の値はnull
になります。distDir
-.next/
ディレクトリへの絶対パス(distDir
設定で変更可能)buildId
- 生成されたビルドID
返されるオブジェクトは、key
がpathname
でvalue
が次のフィールドを受け付けるオブジェクトであるページのマップです:
page
:String
-pages
ディレクトリ内でレンダリングするページquery
:Object
- プリレンダリング時にgetInitialProps
に渡されるquery
オブジェクト。デフォルトは{}
です。
エクスポートされた
pathname
は、ファイル名(例えば/readme.md
)も可能ですが、そのコンテンツを提供する際に.html
と異なる場合はContent-Type
ヘッダーをtext/html
に設定する必要があります。
トレーリングスラッシュを追加する
Next.jsを設定してページをindex.html
ファイルとしてエクスポートし、トレーリングスラッシュを必要にすることができます。/about
は/about/index.html
になり、/about/
でルーティング可能です。これはNext.js 9以前のデフォルトの挙動でした。
元に戻してトレーリングスラッシュを追加するには、next.config.js
を開き、trailingSlash
設定を有効にします:
module.exports = {
trailingSlash: true,
}
出力ディレクトリを カスタマイズする
next export
はデフォルトの出力ディレクトリとしてout
を使用しますが、-o
引数を使用してカスタマイズできます:
next export -o outdir
Warning:
exportPathMap
の使用は推奨されておらず、pages
内のgetStaticPaths
によって上書きされます。これらを一緒に使用することは推奨されません。