SvelteKit 3.0 已成为稳定线,10 月 6 日发布了 3.0.1 补丁(修的是 nodenext 模块解析下相对导入的生成类型)。
环境要求
- Node 22+。
- TypeScript 6。
- Svelte 5.56.4+。
- Vite 8。
- @sveltejs/vite-plugin-svelte v7。
被移除的东西
- $app/stores
- $service-worker
- handleValidationError(校验错误现在以 kind: 'validation' 进入 handleError)
- CSRF 的 checkOrigin 选项
别名变更
- $lib 变成 #lib,模块导入需要写显式扩展名。
这一条是迁移里最费人工的部分,全项目的 $lib 引用都要过一遍。
安全默认值收紧
- 默认禁止外部重定向。
- 拒绝没有 Content-Type 头的跨源表单提交。
- 拒绝以 x-sveltekit- 开头的查询参数。
这三项都是默认安全的正向改动,但会打断一部分历史行为。如果你的应用有跨系统跳转或第三方表单回传,升级前必须先确认路径。
行为变更
- cookie path 默认为 /。
- cookie 名称必须是 ASCII。
- version 轮询默认一小时。
迁移顺序建议
第一步,先把环境对齐(Node / TS / Vite),这一步不通过后面全是噪音。
第二步,全局替换 $lib 并补全扩展名。
第三步,处理被移除模块的替代方案,尤其是 $app/stores 和 $service-worker 这两块,涉及 PWA 的项目要重点回归。
第四步,跑一遍跨源表单和跳转场景,确认新的安全默认值没有挡住正常业务。
第五步,检查所有 cookie 名称是否为纯 ASCII。
容易被忽略的一点
version 轮询改成一小时,意味着前端感知新版本的速度变慢。如果你的发布流程依赖前端快速切换版本,需要手动调这个间隔。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。