如何使用后备构建 nextjs:true 启用
Posted
技术标签:
【中文标题】如何使用后备构建 nextjs:true 启用【英文标题】:how to build nextjs with fallback: true enable 【发布时间】:2021-02-16 07:54:59 【问题描述】:我找不到任何示例来说明部署 nextjs 并启用 fallback: true 所需的操作。
使用 export 会抛出一个错误,如果启用 fallback: true 则无法以这种方式导出。
如果我使用npm run build
,它似乎不会生成 out 文件夹。
我如何运行构建并生成带有 fallback: true 在我的应用中启用的 out 文件夹
netlify.toml [建造] 命令 = "npm 运行构建 && npm 运行导出" 发布 = “出”
package.json “脚本”: “开发”:“下一个开发”, “构建”:“下一个构建”, "开始": "下一个开始", “出口”:“下一次出口” ,
【问题讨论】:
【参考方案1】:您不能使用 npm run build
生成静态“输出”文件夹(即静态 html 文件)。那是因为启用了回退,您的网站变得“非静态”。所以它只能部署在运行 NodeJS 的服务器上。您可以使用node start
启动服务器或实现您自己的 NodeJS 服务器。这是关于 SSG\s-s-r 最容易被误解的一点。更多信息https://nextjs.org/docs/advanced-features/static-html-export
【讨论】:
【参考方案2】:其他帖子没有解释为什么它不起作用。
如果您将fallback
设置为true
,则意味着您的页面具有动态路由 (path/[pid].js
),并且您不想预渲染所有页面。您希望某些页面在没有数据的情况下加载,可能是因为您想手动加载数据。
当您使用 NextJS 的 export
时,它会创建一个没有支持后端的静态应用程序,以便该应用程序可以在静态主机上提供服务。
对于每一个预渲染的路径,NextJS都会生成一个目录结构来匹配预渲染的路径。
如果您有:
product/1
, product/2
, product/3
然后 NextJS 将创建这些目录。
但是如果你有像product/4
这样没有预渲染的路由,那么NextJS 不会创建那个目录,那么当用户打开浏览器到exmample.com/product/4
时,它就会出现404!
【讨论】:
【参考方案3】:如here 所述,如果您使用fallBack: true
,则不能使用next export
,如果您有很多动态页面,最好将您的应用程序托管在任何node.js 服务器上并改用next start
。静态 HTML 导出(out 文件夹)仅在不经常添加新页面时才有用
【讨论】:
以上是关于如何使用后备构建 nextjs:true 启用的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Nextjs + styled-components 与 material-ui 集成