宣布 Svelte 4
更新的性能、开发者体验和网站
经过数月的开发,我们很高兴地宣布 Svelte 4 的稳定版本发布。
时间飞逝——Svelte 3 于四年前发布!在 JavaScript 框架时间里,那是永恒。Svelte 的新鲜感一直持续至今,但 Node.js 和浏览器 API 在此期间已经发展,今天我们正在更新 Svelte 以利用其中的一些改进。Svelte 4 主要是一个维护版本,提升了最低版本要求并在特定领域加强了设计。它为下一代 Svelte(作为 Svelte 5 发布)奠定了基础——我们认为您会喜欢它。
如果您还没有尝试过 Svelte,请在我们的交互式教程、StackBlitz或本地使用npm create svelte@latest
尝试一下。Svelte 允许您轻松地构建 Web UI,利用 HTML、CSS、JS 和 Svelte 编译器的强大功能。观看Svelte Radio Live以了解有关此版本的更多信息。
新增功能
性能
此版本产生了更小、更快的 Hydration 代码。为了了解其影响,SvelteKit 用户可以通过检查.svelte-kit/output/client/_app/immutable/nodes
文件夹来查看其编译输出的大小缩减。例如,在kit.svelte.dev上,整个网站生成的 JS 大小减少了 12.7%(从 126.3 kB 降至 110.2 kB)。
Svelte 4 将 Svelte 包大小减少了近 75%(从 10.6 MB 降至 2.8 MB),这意味着npm install
等待时间更短。对于首次加载我们的交互式学习体验的用户、Svelte REPL 的用户以及连接性有限的用户,此改进将尤其明显。剩余包大小的大部分是 eslint 支持,这需要分发 CJS 构建,一旦eslint 重写完成,Svelte 包大小还可以再减少 50% 以上。
Svelte 中的依赖项数量已大大减少,从 61 个减少到 16 个。这意味着我们的用户下载速度更快,并且不太容易受到供应链攻击。我们还在最新版本的 SvelteKit 中略微减少了依赖项数量。
开发者体验
Svelte 4 使 Svelte 的创作体验更加直观和一致:|local
现在是过渡的默认值,以避免动画阻塞页面过渡,预处理器现在更容易编写,并且多个修复使 CSP 更易于设置和使用。
对于 Web Components 用户,最大的变化是您使用 Svelte 创作自定义元素的方式进行了全面修改。通过更改它们的生成方式,消除了整整一类错误和不一致。
最后,我们还在 IDE 创作体验方面进行了一些改进:svelte 模块中的 cmd+click 现在将带您跳转到实现而不是.d.ts
文件从svelte/internal
导入的内容现在已隐藏,并且不会干扰自动完成建议自动导入现在工作更可靠了
更新的网站、文档和教程
官方的svelte.dev网站进行了全面改造。它现在被拆分为多个页面,改进了移动导航、改进了 TypeScript 文档、暗模式以及增强的 REPL。SvelteKit 网站也正在更新以匹配。并且我们已更新所有教程链接以指向我们的新教程体验。
敬请关注未来几天内关于所有网站更改的更深入的博文!
迁移
大多数与 Svelte 3 兼容的应用程序和库也应该与 Svelte 4 兼容。如果库作者在peerDependencies
中指定了svelte
,则需要更新版本范围以包含 Svelte 4。对于应用程序作者而言,最常见的更改将是更新工具以满足新的最低版本要求,例如 Node.js 16。许多其他迁移步骤可以使用npx svelte-migrate@latest svelte-4
处理。
阅读迁移指南以获取完整详细信息。
Svelte 5:下一代 Svelte
Svelte 5 将是对 Svelte 编译器和运行时的重写。Svelte 4 主要关注为这些未来的改进奠定基础,方法是采用现代工具并放弃对某些旧版技术的支持,例如旧版打包工具。这些更改将以多种方式帮助我们,例如能够更轻松地比较 Svelte 5 和 Svelte 4 的代码库,以及能够针对新实现运行现有测试。Svelte 5 将为 Svelte 带来主要的新功能和性能改进。更改仍在进行中,尚未准备好分享,敬请期待!
变更日志
在变更日志中查看完整的更改列表。
鸣谢
首先,感谢所有使此版本成为可能的众多 Svelte 维护者和贡献者。为本次发布贡献多个 PR 的开发者包括@dummdidumm、@gtm-nayan、@benmccann、@tanhauhau、@Karlinator和@ngtr6788。此外,感谢许多社区成员向Svelte OpenCollective捐款——这些捐款赞助了由PuruVJ完成的网站改版以及@gtm-nayan最近的一些修复。
最后,感谢整个生态系统中的各种库维护者为本次发布做出的准备。感谢@jessebeach帮助发布了aria-query
和axobject-query
的新版本,感谢@jreinhold确保与 Storybook 的兼容性,以及感谢@yanick更新了svelte-testing-library
。为了确保一切正常运行,由@dominikg设置的svelte-ecosystem-ci
(其模型来自他为 Vite 做的类似工作)一直在持续帮助测试生态系统中的主要项目。