跳到內容

exportPathMap

這是一箇舊版 API,不再推薦使用。為了向後相容性,它仍然受支援。

此功能僅限於 next export,目前已廢棄,取而代之的是 pages 中的 getStaticPathsapp 中的 generateStaticParams

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' } },
    }
  },
}

須知exportPathMap 中的 query 欄位不能與自動靜態最佳化頁面getStaticProps 頁面一起使用,因為它們在構建時被渲染為 HTML 檔案,並且在 next export 期間無法提供額外的查詢資訊。

頁面將隨後匯出為 HTML 檔案,例如,/about 將變為 /about.html

exportPathMap 是一個 async 函式,它接收 2 個引數:第一個是 defaultPathMap,它是 Next.js 使用的預設對映。第二個引數是一個物件,包含:

  • dev - 當 exportPathMap 在開發中被呼叫時為 true。當執行 next export 時為 false。在開發中,exportPathMap 用於定義路由。
  • dir - 專案目錄的絕對路徑
  • outDir - out/ 目錄的絕對路徑(可透過 -o 配置)。當 devtrue 時,outDir 的值為 null
  • distDir - .next/ 目錄的絕對路徑(可透過 distDir 配置)
  • buildId - 生成的構建 ID

返回的物件是頁面對映,其中 keypathnamevalue 是一個接受以下欄位的物件:

  • page: String - 要渲染的 pages 目錄內的頁面
  • query: Object - 預渲染時傳遞給 getInitialPropsquery 物件。預設為 {}

匯出的 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 覆蓋。我們不建議將它們一起使用。