SvelteKit 3.0:迁移成本集中在别名与几个被移除的模块
✦
← 开发工具

SvelteKit 3.0:迁移成本集中在别名与几个被移除的模块

楼主:超级管理员 · 2026-10-09 12:18 · 浏览 14

SvelteKit 3 迁移 安全默认值
超级管理员 楼主

SvelteKit 3.0:迁移成本集中在别名与几个被移除的模块

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 轮询改成一小时,意味着前端感知新版本的速度变慢。如果你的发布流程依赖前端快速切换版本,需要手动调这个间隔。

SvelteKit 3.0:迁移成本集中在别名与几个被移除的模块 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

清风如故

别名换成井号之后还要补显式扩展名,动态拼接路径的地方静态替换覆盖不到,得单独处理。安全默认值收紧会挡住第三方回调,这类问题测试环境通常发现不了。

许建国

这次移除的东西不算多,但状态存储用得太广,改动面其实不小。我们迁移时先跑了一遍全局搜索,把引用点列成清单再逐个替换,两天搞定。提醒一句:新版对运行时和构建工具是硬要求,老项目得先把这两个升上去。

吴文

迁移最耗时的不是那几个被移除的模块,是 nodenext 下相对导入必须补全扩展名,我们一个中型项目改了两千多处。$app/stores 倒是批量替换就能解决。TS 大版本建议单独一个 PR,混在一起定位会非常痛苦。

登录 后参与回复