next.js中的"next export"和"next build"有什么区别



我开发了一个web应用程序,它使用Nextjs应用程序作为前端,使用Python(Django(API服务器作为后端。我的大多数前端页面都有对后端服务器的API调用(在ComponentDidMount中或响应用户的操作,如按钮单击(。

我想将此应用程序部署到我的服务器。我使用Nginx作为反向代理。后端部署已排序。我对部署nextjs应用程序感到困惑。

在阅读了这些文档后,我发现有两种方法可以做到这一点:

  1. 运行next build,然后运行next start。这将在端口3000上启动一个nodejs服务器。我可以使用Nginx将流量引导到此端口
  2. 运行next export。这将生成一个out目录。我可以使用像Nginx这样的反向代理将传入流量引导到此目录

我应该使用这两个选项中的哪一个?有什么区别?

借助我在NextJS讨论论坛链接此处上收到的答案回答我自己的问题

下一次生成、启动和导出的基础知识

next build.next文件夹中构建生产应用程序。无论是要运行next start还是next export,都需要运行此命令。

构建完成后,next start启动一个支持混合页面的Node.js服务器,为静态生成的页面和服务器端渲染的页面提供服务。

next export会将您的所有页面导出为静态HTML文件,您可以在任何主机上使用这些文件。这与create-react-app类似,但您仍然可以使用exportPathMap在构建时构建动态页面。

注意:使用next export静态生成的页面仍然是被动的,即任何在运行时更新页面的动态JS代码都将继续照常运行(就像任何其他ReactJS应用程序一样(。Next.js将为您的应用程序客户端提供充分的交互性。只是页面的动态部分只会在运行时在浏览器中呈现,因此搜索引擎爬网程序无法使用它。

何时使用下一次导出

如果您有一些动态页面需要在"构建"时仅提取一些数据,则建议使用next export。它非常适合登陆页、博客、新闻文章等页面,或者只在代码构建期间更新的其他类型的页面。如果需要更频繁地更新页面数据,可以设置后台任务以定期生成代码。这将加快您的"第一次绘制"速度,并将整个页面数据提供给搜索引擎爬网程序进行索引。

何时使用下一次启动

如果您在构建时不需要任何数据获取,即您的页面在运行时动态呈现,那么您应该使用next build,然后使用next start。这也将为页面中非动态的部分生成静态HTML。这将加快页面的"第一次绘制"时间。请参阅此自动静态优化。

下一次导出,也生成了一个优化的生产就绪构建,但它构建了完全静态的应用程序,这意味着只有html、css和javascript,但没有服务器端代码。

由于没有服务器端代码,您不需要服务器来托管您的应用程序。这使得托管你的应用程序更容易、更便宜,因为你不需要维护和扩展服务器。市场上有很多主机,价格非常好。

由于next export构建了一个静态应用程序,这意味着你不能使用api路由,服务器端函数,因此你不能重新验证。重新验证意味着,您的应用程序将在您指定的特定时间内检查数据库。假设你有一个博客应用程序,你将你的博客文章保存到数据库中,使用服务器端coe,你在服务器端获取这些文章,将它们传递给客户端,客户端呈现这些文章,并设置了重新验证选项,如果内容更改,你的应用程序将自动检查数据库。由于您无法使用此功能,因此无论何时应用程序的内容发生更改,您都必须重新部署应用程序。

最新更新