资讯 Svelte 5.57.0 发布:服务端渲染导出增强、createContext has 函数与 SvelteMap 新方法

2026-09-07 04:09:05

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

复制全文 生成海报 Svelte 5.57.0 前端 createContext SvelteMap SSR 发布

推荐文章

程序员茄子在线接单