NextJS中文文档 - ExportPathMap
此功能仅适用于
next export,目前已被pages中的getStaticPaths或app中的generateStaticParams弃用。
exportPathMap 允许你在导出过程中指定请求路径到页面目标的映射。在 exportPathMap 中定义的路径在使用 next dev 时也可用。
让我们从一个例子开始,为一个具有以下页面的应用创建自定义 exportPathMap:/nextjs-cn/
pages/index.jspages/about.jspages/post.js
打开 next.config.js 并添加以下 exportPathMap 配置:
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' } },
}
},
}1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
须知:
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配置)。当dev为true时,outDir的值将为null。distDir-.next/目录的绝对路径(可通过distDir配置)buildId- 生成的构建 ID /nextjs-cn/ 返回的对象是页面的映射,其中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 配置:
js
module.exports = {
trailingSlash: true,
}1
2
3
2
3
自定义输出目录
bash
next export -o outdir1
警告:使用
exportPathMap已被弃用,并被pages内的getStaticPaths覆盖。我们不建议同时使用它们。


