跳到主要内容

exportPathMap

此功能仅适用于 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 期间无法提供额外的 query 信息。

这些页面随后将被导出为 HTML 文件,例如 /about 会变成 /about.html

exportPathMap 是一个 async 函数,接收两个参数:第一个是 defaultPathMap,即 Next.js 使用的默认映射。第二个参数是一个对象,包含:

  • dev - 当在开发环境中调用 exportPathMap 时为 true,运行 next export 时为 false。在开发环境中,exportPathMap 用于定义路由。
  • dir - 项目目录的绝对路径
  • outDir - out/ 目录的绝对路径(可通过 -o 配置)。当 devtrue 时,outDir 的值为 null
  • distDir - .next/ 目录的绝对路径(可通过 distDir 配置)
  • buildId - 生成的构建 id

返回的对象是页面的映射,其中 keypathnamevalue 是一个对象,接受以下字段:

  • pageString - 要渲染的 pages 目录下的页面
  • queryObject - 预渲染时传递给 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 默认使用 out 作为输出目录,你可以使用 -o 参数自定义,如下所示:

Terminal
next export -o outdir

警告:使用 exportPathMap 已被弃用,并会被 pages 内的 getStaticPaths 覆盖。我们不建议同时使用它们。