exportPathMap

この機能は next export 専用で、現在は pagesgetStaticPaths または appgenerateStaticParams を優先するため非推奨です。

exportPathMap を使用すると、エクスポート時に使用されるリクエストパスからページ宛先へのマッピングを指定できます。exportPathMap で定義されたパスは next dev 使用時にも利用可能です。

以下のページを持つアプリケーションのカスタム exportPathMap を作成する例から始めましょう:

  • pages/index.js
  • pages/about.js
  • pages/post.js

next.config.js を開き、以下の exportPathMap 設定を追加します:

next.config.js
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' } },
    }
  },
}

豆知識: exportPathMapquery フィールドは、自動静的最適化ページgetStaticProps ページ では使用できません。これらはビルド時にHTMLファイルとしてレンダリングされるため、next export 時に追加のクエリ情報を提供できないからです。

ページはHTMLファイルとしてエクスポートされます。例えば /about/about.html になります。

exportPathMap は2つの引数を受け取る async 関数です。最初の引数は defaultPathMap で、Next.jsが使用するデフォルトのマップです。2番目の引数は以下のプロパティを持つオブジェクトです:

  • dev - 開発時に exportPathMap が呼び出される場合は truenext export 実行時は false。開発時には exportPathMap がルート定義に使用されます
  • dir - プロジェクトディレクトリの絶対パス
  • outDir - out/ ディレクトリの絶対パス(-o で設定可能)。devtrue の場合、outDir の値は null になります
  • distDir - .next/ ディレクトリの絶対パス(distDir 設定で設定可能)
  • buildId - 生成されたビルドID

返されるオブジェクトはページのマップで、keypathnamevalue は以下のフィールドを受け入れるオブジェクトです:

  • 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 設定を有効にします:

next.config.js
module.exports = {
  trailingSlash: true,
}

出力ディレクトリのカスタマイズ

next export はデフォルトで out を出力ディレクトリとして使用します。-o 引数を使用して以下のようにカスタマイズできます:

ターミナル
next export -o outdir

警告: exportPathMap の使用は非推奨であり、pages 内の getStaticPaths によって上書きされます。これらを一緒に使用することはお勧めしません。

On this page