Svelte 团队已推动 SvelteKit 3 进入候选发布阶段。此次更新的定位是清理旧代码、为框架未来演进奠定基础,而非一次包含大量新功能的发布。如果测试顺利,预计随后将发布稳定版本,且不会再有破坏性变更。

最主要的变化是配置位置。SvelteKit 2 中的 svelte.config.js 已被移除,配置现在位于 vite.config.ts 中,使 Vite 插件能够同步读取配置,而不必等待异步解析步骤。参考文档指出,通过 Vite 进行配置早在 2.62 版本中就已引入,此次候选版本是对已经开始的迁移过程作出最终确认。

争议最大的一项变化是移除 $lib 别名,改用 #lib。后者依赖在 package.json 中声明的 Node 原生子路径导入,而不是使用需要 Vite 和 TypeScript 协同处理的 SvelteKit 专用路径。开发者现在还需要添加文件扩展名,即把 $lib/foo 改为 #lib/foo.js。在最初的 GitHub Issue 中,维护者 Rich Harris 表示,自己“很希望所有人都使用 nodenext”,但无扩展名导入可能会让“用户反感”,并补充称,任何反对这一变化的人“始终可以创建自己的别名”。

其他变化包括:tsconfig.json 现在继承 $app/tsconfig,而不是生成的 .svelte-kit 文件;Service Worker 从 $app/env、$app/paths 和新的 $app/manifest 模块中获取内容;显式环境变量结束实验阶段,并可选择使用 Standard Schema 进行验证。由于 SvelteKit 3 要求使用 Svelte 5,错误处理也得到改进:+error.svelte 组件会在加载失败和渲染失败时显示,所有错误都会流经 handleError,堆栈跟踪也会获得 Source Map。浅层路由从 pushState 迁移到 goto,并使用 shallow: true 选项。

在底层,SvelteKit 3 现在要求使用 Vite 8 及其 Rolldown 打包器,以实现更快的构建。该团队拒绝采用 FetchableDevEnvironment,理由是它迫使框架承担过多复杂性。仍然隐藏在实验性标志之后的是远程函数,这是一种类型安全的客户端—服务器 RPC 方法,与 React Server Actions 和 Next.js 服务器函数相呼应。SvelteKit 是 Svelte 的官方应用框架,由目前已加入 Vercel 的 Svelte 团队维护,自 2022 年末发布 1.0 版本以来,已成为构建 Svelte 应用的默认方式。