SvelteKit 配置预渲染后使用adapter-node部署未返回预渲染页面的问题
问题原因
结合你使用的adapter-node适配器逻辑,出现该现象的核心原因有两点:
adapter-node默认不会自动映射预渲染目录的文件到静态响应adapter-node构建后的默认静态资源服务目录是build/static,仅该目录下的文件会被直接作为静态资源返回。你生成的预渲染HTML默认存放在build/prerendered目录下,不在静态服务的映射规则范围内,因此服务收到根路由请求时,会走默认的运行时SSR渲染逻辑,而非直接读取预渲染好的HTML文件返回。$app/env导出的prerendering变量运行时恒为false
该变量的取值逻辑仅在构建阶段的预渲染流程中为true,只要进入运行时场景(无论是服务端SSR渲染、还是客户端hydration阶段),该变量会被重写为false。你禁用JavaScript后看到的内容,完全来自服务器直接返回的HTML,不存在 hydration 替换的可能,说明返回的就是运行时SSR生成的内容,和预渲染HTML里写死的true无关。
可行的解决方向
- 若需要让服务优先返回预渲染的静态页面,可在
svelte.config.js中为adapter-node配置静态资源映射规则,将prerendered目录下的文件加入服务的静态路由列表,让对应路由直接读取预渲染HTML返回。 - 如果你的站点所有页面都开启了预渲染,也可切换为
adapter-static适配器,该适配器会自动将预渲染文件输出到可直接托管的静态目录,适配纯静态托管场景。
内容的提问来源于stack exchange,提问作者Deb
相关产品推荐
相关产品推荐

