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' } },
}
},
}
Good to know:
exportPathMapのqueryフィールドは、自動的に静的に最適化されたページやgetStaticPropsページとは使用できません;これらはビルド時にHTMLファイルとしてレンダリングされ、追加のクエリ情報はnext export中に提供できません。
その後、ページはHTMLファイルとしてエクスポートされます。たとえば、/about は /about.html になります。
exportPathMap は2つの引数を受け取る async 関数です:最初のものは 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
警告:
exportPathMapの使用は非推奨であり、pages内のgetStaticPathsによって上書きされます;これらを一緒に使用することは推奨しません。