introduction
这个特性是next export
独有的,查看静态HTML 导出 了解更多 ..
exportPathMap
允许你指定一个请求路径的映射到页面目的地 …. 能够在导出的时候使用,在exportPathMap
定义的路径在next dev
的时候也是可用的 …
让我们从一个示例开始,去创建自定义的exportPathMap
(对于一个包含了以下目录的app)
pages/index.js
pages/about.js
pages/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' } },
}
},
}
注意: exportPathMap
中的query
字段不能够与自动静态优化页面或者使用了getStaticProps
的页面进行使用 - 因为它们将在构建时渲染为HTML 页面并且在next export
阶段额外的查询信息也不能够提供 …
这些页面将会暴露成一个HTML 文件,例如/about
将变成/about.html
exportPathMap
是一个异步函数能接收两个参数,第一个参数是defaultPathMap
,这是一个由Next.js 使用的默认map ..
第二个参数是一个对象
dev
-true
当exportPathMap
将在开发下被调用 ..
false
当运行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
这个query
对象将会传递给getInitialProps
(当预渲染的时候),默认为{}
这里暴露的pathname
能够是文件名(例如/readme.md
),但是你需要设置Content-Type
header为text/html
(当它提供的内容不同于.html
)
增加尾缀斜杠
最好配置Next.js 暴露页面作为 index.html
文件并确保必要的尾斜杠,这样/about
将变成/about/index.html
并且可以通过/about/
进行路由,这在Next 9 之前是默认行为 ..
为了在尾斜杠之间进行切换,可以配置trailingSlash
配置
module.exports = {
trailingSlash: true,
}
自定义输出目录
next export
将使用out
作为默认的输出目录,你能够自定义(通过 -o
参数),例如
next export -o outdir
敬告:
使用exportPathMap
对于使用了getStaticPaths
支持的页面路由现在将被忽略并且能够被覆盖,我们推荐不要结合使用它们 …