SvelteKit静态站点构建时根目录动态slug匹配硬编码路由问题求助
SvelteKit static adapter 静态路由与同层级动态路由冲突修复方案
- 方案1:手动配置预渲染路由条目
在svelte.config.js中明确指定所有需要预渲染的路由,强制构建程序优先处理硬编码路由:
import adapter from '@sveltejs/adapter-static'; const config = { kit: { adapter: adapter(), prerender: { entries: [ '/', '/Angststoornis', '/Doelgroep', '/Prijs', '/Selectief-mutisme', // 可在此处补充所有已知的城市动态路由 '/gent', '/antwerpen' ] } } }; export default config;
- 方案2:使用路由匹配器排除硬编码路由
通过动态路由匹配规则从根源避免冲突,操作如下:
- 在项目
src目录下新建params文件夹,在其中创建location.js文件,内容如下:
// src/params/location.js // 填入所有硬编码路由的路径名 const reservedRouteNames = ['Angststoornis', 'Doelgroep', 'Prijs', 'Selectief-mutisme']; export function match(param) { return !reservedRouteNames.includes(param); }
- 将根目录下的动态路由文件从
[locationName].svelte重命名为[locationName=location].svelte,该配置会让动态路由仅匹配不在硬编码路由列表内的参数,完全不会抢占静态路由的匹配优先级。
- 补充校验项
确认所有硬编码路由对应的目录下,均存在合法的页面入口文件,无文件名拼写、大小写错误。
问题原因说明
开发环境为请求时实时匹配路由,会严格按照静态路由优先级高于动态路由的规则执行;静态构建阶段默认通过爬取页面内链接生成页面资源,未明确配置的路由可能因扫描顺序问题出现匹配异常,上述两种方案均可强制固定路由匹配逻辑,彻底解决冲突。
内容的提问来源于stack exchange,提问作者Lvn W
相关产品推荐
相关产品推荐

