exportPathMap
この機能は
next export専用であり、現在はpagesのgetStaticPathsまたはappのgenerateStaticParamsに置き換えられています。
exportPathMap を使用すると、エクスポート時にリクエストパスからページの宛先へのマッピングを指定できます。exportPathMap で定義されたパスは、next dev を使用する際にも利用可能です。
例として、以下のページを持つアプリのカスタム exportPathMap を作成してみましょう:
pages/index.jspages/about.jspages/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' } },
}
},
}補足:
exportPathMapのqueryフィールドは、自動的に静的に最適化されたページやgetStaticPropsページでは使用できません。これらのページはビルド時にHTMLファイルにレンダリングされるため、追加のクエリ情報をnext export中に提供することはできません。
ページは HTML ファイルとしてエクスポートされます。例えば、/about は /about.html になります。
exportPathMap は、2 つの引数を受け取る非同期関数です:最初の引数は 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)にすることもできますが、異なる場合はコンテンツを提供する際にContent-Typeヘッダーを.html以外の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注意:
exportPathMapの使用は非推奨であり、pages内のgetStaticPathsによって上書きされます。これらを一緒に使用することはお勧めしません。