Svelte 5.57.0 发布:服务端渲染导出增强、createContext has 函数与 SvelteMap 新方法
Svelte 官方发布 5.57.0 版本。这是一个功能更新版本,主要变化包括:从 svelte/server 导出 RenderOutput、SyncRenderOutput、Csp 和 Sha256Source;createContext 新增 has 函数; 支持 defaultValue;SvelteMap 新增 getOrInsert/getOrInsertComputed 方法。同时包含多项补丁修复和性能优化。本文基于 Svelte 官方发布说明,系统解读 5.57.0 的变更内容。
版本概况
Svelte 5.57.0:
- 发布者:github-actions 机器人
- 发布于 2026 年 8 月 28 日
- 自上一版本以来包含 11 个提交到 main
- 提交经过 GitHub 验证签名
功能变更
svelte/server 新导出
从 svelte/server 导出新增:
- RenderOutput:服务端渲染输出类型
- SyncRenderOutput:同步渲染输出类型
- Csp:内容安全策略相关类型
- Sha256Source:SHA-256 哈希源类型
这些导出完善了 Svelte 服务端渲染的公共类型 API,让服务端渲染和 CSP 集成有更完整的类型支持。
createContext 新增 has 函数
- createContext 现在返回的上下文对象支持 has 函数
- 用于检查某个上下文中是否存在指定的 key
- 避免在不安全的情况下直接读取上下文值
- 对组件库开发尤其有用:可以检查消费者组件是否提供了预期的上下文
支持 defaultValue
- 元素现在支持 defaultValue 属性
- 与表单控件的 defaultValue 语义一致
- 简化受控/非受控 select 的初始化场景
SvelteMap 新增方法
- getOrInsert:获取指定 key 的值,如果不存在则插入给定值并返回
- getOrInsertComputed:获取指定 key 的值,如果不存在则计算并插入新值返回
- 与 Map 相关的常见"获取或创建"模式现在有内建支持
- 减少手动检查与插入的样板代码
补丁修复
- 修复模板 store 订阅在分配 store 的 promise 上被阻塞的问题
- 修复 $derived 拆除错误通过 invoke_error_boundary 传递
- 修复 SvelteDate 快照在 reactions 中的追踪
- 移除 svelte:head 锚点在卸载时的残留
- 对 svelte:window、svelte:document 和 svelte:body 上未声明的简写事件处理器发出警告
- 防止 带静态 value 属性时产生畸形 AST 输出
- 将所有权变更忽略应用到绑定赋值
- 修复 compilerOptions.hmr 为 true 时 onoutroend 触发两次
- 打印时保留内联元素后的空白
- 服务器渲染抛出错误时运行 onDestroy 回调
- 报告简写事件处理器的更多场景
性能优化
- 在 / 值守卫中复用缓存值
- 将 SSR block-open 标记折叠到分支的第一次 push 中
实践建议
组件库开发
- 使用 createContext 的 has 函数检查上下文存在性
- 利用 RenderOutput/SyncRenderOutput 类型完善 SSR 组件类型
- 对 SSR + CSP 场景使用 Csp 和 Sha256Source 类型
表单与状态管理
- 的 defaultValue 简化初始化
- SvelteMap 的 getOrInsert/getOrInsertComputed 减少样板代码
- 注意 onoutroend 在 HMR 模式下的行为修复
总结
Svelte 5.57.0 是面向开发体验和正确性的功能更新。四个功能变更:svelte/server 新增 RenderOutput、SyncRenderOutput、Csp、Sha256Source 导出(完善服务端渲染与 CSP 类型支持);createContext 新增 has 函数(安全检查上下文存在性,对组件库开发有价值); 支持 defaultValue(简化表单初始化);SvelteMap 新增 getOrInsert/getOrInsertComputed(内建"获取或创建"模式)。补丁修复覆盖模板 store 订阅、$derived 错误传递、SvelteDate 快照追踪、svelte:head 锚点残留、简写事件处理器警告、select AST 输出、HMR 下 onoutroend 重复触发、SSR 错误时的 onDestroy 回调等。性能优化包括 option/select 值守卫缓存复用和 SSR block 标记折叠。对 Svelte 开发者,升级到 5.57.0 可以获得更完整的类型支持、更少的样板代码和一系列正确性修复,尤其是使用服务端渲染、组件上下文和 SvelteMap 的场景。
来源:https://github.com/sveltejs/svelte/releases/tag/svelte%405.57.0