You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

服务器如何使用Next.js生成完整文档发送给客户端?

Next.js服务端渲染核心逻辑说明

你困惑的本质是把Next.js当成了和Vite、Create React App一样的纯前端打包工具,实际上它是个自带服务端运行时的全栈框架,核心逻辑拆解开非常直白:

构建阶段到底输出了什么

执行next build之后生成的.next目录,根本不是纯前端静态资源,里面的内容分两大类:

  • 客户端侧资源:和普通React项目打包产物性质一致,包括给浏览器下载执行的JS、CSS、静态图片、预渲染生成的静态HTML片段,用来做客户端水合。
  • 服务端侧可执行代码:这部分是编译好的Node.js(或边缘运行时兼容)代码,包含了所有路由的匹配规则、每个页面对应的数据获取逻辑、React组件的服务端渲染逻辑,同时会生成一份明确的路由渲染模式清单,标注清楚每个路由是纯静态生成(SSG/ISR)、需要每次请求触发服务端渲染(SSR)、还是对应React服务端组件(RSC)逻辑。

服务器怎么判定是否要执行SSR

不存在“通用Web服务器识别Next.js文件然后触发渲染”的过程——你部署Next.js项目的时候,从来不是把构建产物扔到Nginx这类静态Web服务器就完事:
不管你是用next start命令启动原生Node服务,还是部署到支持Next.js的托管平台,本质上你启动的是Next.js本身自带的Web服务程序,所有用户请求都会先进入这个程序的处理逻辑:

  1. 首先匹配请求路径,如果是/_next/static/下的静态资源、或者public目录的静态文件,直接返回对应文件内容,不做渲染处理。
  2. 对照构建时生成的路由清单,匹配当前访问路径对应的渲染规则:
    • 如果是SSR/RSC路由:直接执行对应路径的服务端代码,拉取所需数据、把React组件渲染为HTML字符串,把注入了渲染数据的完整HTML返回给浏览器。
    • 如果是预渲染的静态路由:直接返回构建阶段就生成好的HTML文件即可,不需要临时执行渲染逻辑。

和纯客户端React项目的核心差异

你提到的普通React项目只返回空HTML,和Next.js返回完整HTML的核心区别,本质是部署的服务端逻辑完全不一样:

  • 普通客户端渲染的React项目,打包完只有纯静态资源,没有任何服务端执行逻辑。部署时就是把静态文件扔到静态Web服务器上,服务器只会做文件返回的工作,根本不会执行JS、也不认识React组件,不管访问什么路径都统一返回带空<div id="root"></div>的入口HTML,剩下的内容全靠浏览器下载JS之后在用户本地渲染完成。
  • Next.js项目部署时跑的是它自带的服务端程序,这个程序本身就内置了React渲染能力,能直接在服务端把组件转成HTML字符串,遇到需要SSR的请求自然会返回渲染完成的完整HTML,不需要等客户端下载JS再渲染内容。

补充一个常见误区:不要把Next.js的构建产物当成可以随便丢到任意静态服务器上运行的文件,只有跑在Next.js自己的服务端运行时(或者官方适配过的Serverless/边缘运行时环境)上,它的SSR、RSC这类服务端能力才能正常工作。

内容的提问来源于stack exchange,提问作者Code Eagle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:57:11