如何在SvelteKit中去除路由布局结构导致的URL多余slug段
最优解决方案:使用SvelteKit路由分组功能
你完全不需要修改manifest.js或者代理配置,SvelteKit原生支持不带路径前缀的路由分组功能,只需要修改一行目录名即可:
把你的articles/路由目录重命名为(articles)/(括号是语法要求,不能省略),其余所有文件的位置、代码逻辑完全不需要改动。
修改后的路由结构如下:
src/routes/ __layout.svelte <- 原有逻辑不变,全局请求头部导航链接数据 (articles)/ __layout.svelte <- 原有逻辑不变,请求侧边栏标签列表、提供分栏布局 index.svelte <- 原有逻辑不变,对应路由路径 `/` u[id].svelte <- 原有逻辑不变,对应路由路径 `/u[id]` [id].svelte <- 原有逻辑不变,对应路由路径 `/[id]` about.svelte <- 对应路由 `/about` 不变 contacts.svelte <- 对应路由 `/contacts` 不变
SvelteKit会自动忽略括号包裹的分组目录名,不会将其计入URL路径,同时原有的布局继承关系、load函数执行逻辑完全不受影响,生成的URL就是你需要的格式。
为什么你之前的方案不生效
config.kit.vite.server.proxy仅会处理服务端收到的请求转发,不会修改客户端侧的路由生成逻辑,前端跳转时还是会生成带/articles前缀的路径,自然达不到效果。- 直接修改构建产物
manifest.js完全不推荐,每次构建都会被覆盖,且容易出现路由匹配异常、资源加载错误等问题。
兼容旧版本SvelteKit方案
如果你用的是非常旧的、不支持路由分组的SvelteKit版本,可以直接把articles/目录下的4个文件全部移动到src/routes/根目录,把原来articles/__layout.svelte的布局逻辑抽成公共布局组件,在index.svelte、u[id].svelte、[id].svelte三个页面中引入即可,效果完全一致。
内容的提问来源于stack exchange,提问作者MaxCore
相关产品推荐
相关产品推荐

