执行npm run build报错,已添加prerender=true至+layout.svelte仍无效
问题:SvelteKit 使用 adapter-static 构建时遇动态路由报错
我执行npm run build生成可部署到AWS实例的/build文件夹时,遇到如下报错:
Run npm run preview to preview your production build locally. > Using @sveltejs/adapter-static @sveltejs/adapter-static: all routes must be fully prerenderable, but found the following routes that are dynamic: - src/routes/ You have the following options: - set the `fallback` option — see https://github.com/sveltejs/kit/tree/master/packages/adapter-static#spa-mode for more info. - add `export const prerender = true` to your root `+layout.js/.ts` or `+layout.server.js/.ts` file. This will try to prerender all pages. - add `export const prerender = true` to any `+server.js/ts` files that are not fetched by page `load` functions. - pass `strict: false` to `adapter-static` to ignore this error. Only do this if you are sure you don't need the routes in question in your final app, as they will be unavailable. See https://github.com/sveltejs/kit/tree/master/packages/adapter-static#strict for more info. If this doesn't help, you may need to use a different adapter. @sveltejs/adapter-static can only be used for sites that don't need a server for dynamic rendering, and can run on just a static file server. See https://kit.svelte.dev/docs/page-options#prerender for more details error during build: Error: Encountered dynamic routes
报错提示需将export const prerender = true添加至根目录的+layout.js/.ts或+layout.server.js/.ts文件,但我将其添加到了+layout.svelte中:
<script> import '../app.css' export const prerender = true </script> <slot />
之后我又尝试了帖子中的写法:
<script context="module"> export const prerender=true; // +layout.svelte </script>
但两种方式都无法解决问题,请问这是为什么?
原因及解决方案
- 核心问题:页面配置项(比如
prerender)不能写在+layout.svelte里,SvelteKit的路由系统只会从+layout.js/ts或+layout.server.js/ts这类专门的配置文件读取全局路由配置。 - 正确操作步骤:
- 在
src/routes/目录下创建+layout.js文件(如果已存在则直接编辑) - 在文件中添加以下代码:
export const prerender = true;
- 在
- 为什么之前的写法无效:
- 普通
<script>标签里的导出是组件内部变量,不属于路由级别的配置项; - 带
context="module"的<script>是组件模块级导出,仅作用于组件自身逻辑,不会被SvelteKit的路由解析系统识别为全局路由配置。
- 普通
- 其他可选方案:
- 若你的站点需要SPA模式,可在
adapter-static的配置中设置fallback: 'index.html'; - 确保所有独立的
+server.js/ts文件都添加export const prerender = true(如果这些接口不需要动态服务支持); - 检查是否存在未处理的动态路由(如带参数的
[slug]路由),这类路由要么配置预渲染规则,要么更换为支持动态渲染的adapter。
- 若你的站点需要SPA模式,可在
内容的提问来源于stack exchange,提问作者plutownium
相关产品推荐
相关产品推荐

