写点什么

SvelteKit 3 进入 RC:svelte.config.js 没了,$lib 也要退休

作者:Daniel Curtis
  • 2026-10-12
    北京
  • 本文字数:1365 字

    阅读完需:约 4 分钟

AI摘要

SvelteKit 3 进入候选发布阶段,核心目标是清理技术债、统一配置机制并完成向 Vite 原生能力的深度对齐。配置已迁移至 vite.config.ts,$lib 别名被 #lib 取代,依赖 Node 子路径导入规范。

统一配置至 vite.config.ts,消除异步解析依赖;#lib 替代 $lib,强制显式文件扩展名;迁移 CLI 工具提供自动化重构支持。

适合前端架构师、Svelte 应用开发者、Vite 插件开发者阅读。

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

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

争议最大的一项变化是移除 $lib 别名,改用 #lib。后者依赖在 package.json 中声明的 Node 原生子路径导入,而不是使用需要 Vite 和 TypeScript 协同处理的 SvelteKit 专用路径。开发者现在还需要添加文件扩展名,即把 $lib/foo 改为 #lib/foo.js。

迁移指南建议现有应用使用以下 CLI 命令:

npx sv@next migrate sveltekit-3 --tasks all --confirm
复制代码

在 Reddit 上,一位开发者写道,自己讨厌 lib 的这项变化:

我讨厌从 $lib 改成 #lib,这使它与 $app 等其他内容不再一致。希望不会强制要求使用 #lib,而是允许我们使用任何想用的别名。

另一位回复者起初表示赞同,随后承认这是“一项很棒的变化”:

是啊,这背后的逻辑是什么?

编辑:哦,算了,这是一项很棒的变化。他们正在将它迁移到 package.json 原生的别名定义中。这意味着,你可以在某些可能需要脱离 SvelteKit 运行的 lib/server 代码中使用该别名。

在最初的 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 服务器函数相呼应。该团队表示,相比之下,它让 load 函数和 actions 显得“有些笨拙”。

SvelteKit 是 Svelte 的官方应用框架,构建于 Vite 之上,由目前已加入 Vercel 的 Svelte 团队维护。它负责处理路由、服务器端渲染、数据加载和部署适配器,使开发者能够使用基于编译器的 Svelte UI 框架构建全栈 Web 应用程序,而不必使用虚拟 DOM。自 2022 年末发布 1.0 版本以来,它已经成为构建 Svelte 应用的默认方式。它将自身定位为 Next.js 和 Remix 等 React 框架的竞争者,同时依托 Svelte 更小的运行时和响应式语法。

原文链接:https://www.infoq.com/news/2026/09/sveltekit-3-vite/