如何使用后备构建 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 集成

如何使用 NGINX 部署 NextJS?

在 dev = true 模式下运行时节点 NextJS 应用程序重新编译

Nextjs 构建错误,详细日志没有显示

如何运行 Next Js 应用程序构建(输出)目录?

如何在 NextJS 中使用 Prisma 创建后重新获取数据?