跳至主要内容

宣布 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-queryaxobject-query的新版本,感谢@jreinhold确保与 Storybook 的兼容性,以及感谢@yanick更新了svelte-testing-library。为了确保一切正常运行,由@dominikg设置的svelte-ecosystem-ci(其模型来自他为 Vite 做的类似工作)一直在持续帮助测试生态系统中的主要项目。