本文档全面介绍了 Svelte 框架仓库,解释了其架构、关键组件以及它们之间的交互方式。Svelte 是一个基于组件的 UI 框架,它将声明式组件编译成高效的 JavaScript,用于渲染 Web 应用程序。与大多数工作在浏览器中的传统框架不同,Svelte 将大部分工作转移到编译步骤,从而生成高度优化的代码。
有关项目文件结构和组织的详细信息,请参阅 项目结构。有关开发入门指南,请参阅 入门指南。
Svelte 由几个关键系统组成,它们协同工作,将组件定义转换为高效的 DOM 操作。
Svelte 框架包含两个主要系统:
.svelte 组件文件转换为优化的 JavaScript 代码。开发人员在 .svelte 文件中编写组件,编译器会将这些文件转换为纯 JavaScript。这些优化的代码使用 Svelte 运行时,在状态更改时高效地更新 DOM。
来源:packages/svelte/package.json,README.md
编译器在三个主要阶段进行操作:
.svelte 组件代码转换为抽象语法树 (AST)。输出包括用于客户端渲染、服务器渲染和带有作用域隔离的优化 CSS 的独立代码。
来源:packages/svelte/src/compiler/phases/2-analyze/visitors/RegularElement.js
Svelte 的响应性系统围绕“runes”构建——类似 `$state`、`$derived`、`$effect` 和 `$props` 的特殊函数,它们编译成精细的响应性系统。当状态发生变化时,更改会流经系统:
该系统为开发人员提供了简单的思维模型,同时在底层实现了高性能渲染。
来源:packages/svelte/CHANGELOG.md,documentation/docs/02-runes/07-$inspect.md
Svelte 中的组件遵循特定的编译和渲染过程:
该框架会验证 HTML 结构,确保组件符合标准,同时提供有用的错误消息。
来源:packages/svelte/src/internal/server/payload.js,packages/svelte/src/internal/server/dev.js
Svelte 支持服务器端渲染 (SSR) 和客户端水合。
该框架在服务器渲染期间跟踪元素命名空间(HTML、SVG、MathML)并验证 HTML 结构,从而防止服务器和客户端渲染之间的水合不匹配。
来源:packages/svelte/src/internal/server/payload.js,packages/svelte/src/internal/server/dev.js,packages/svelte/tests/runtime-runes/samples/svg-namespace-if-block-3/_config.js
Svelte 的响应性建立在一个“runes”系统之上——定义响应式行为的特殊函数。
$inspect.trace()。当组件渲染时,这些 runes 会建立一个响应性图,跟踪依赖关系并在状态更改时高效地更新 DOM。
来源:packages/svelte/CHANGELOG.md,documentation/docs/02-runes/07-$inspect.md
Svelte 目前版本为 5.27.0,如源代码所示。该框架专为现代浏览器和 Node.js 环境而设计(需要 Node.js 18+)。该包暴露了各种模块:
| 模块 | 目的 |
|---|---|
| svelte | 用于客户端和服务器渲染的核心包。 |
| svelte/compiler | 编译器特定功能。 |
| svelte/reactivity | 响应性原语($state、$derived 等)。 |
| svelte/store | Store 管理工具。 |
| svelte/transition | 过渡效果 |
| svelte/animate | 动画工具 |
| svelte/motion | 运动工具(Spring、Tween)。 |
| svelte/server | 服务器端渲染工具。 |
| svelte/elements | TypeScript 的 HTML 元素类型。 |
该框架采用基于模块的架构,客户端和服务器代码之间有清晰的划分,允许在打包时进行高效的 tree-shaking。
来源:packages/svelte/package.json,packages/svelte/src/version.js
Svelte 在编译和运行时提供全面的错误处理和验证。
对于服务器端渲染,该框架会验证 HTML 结构和命名空间,防止服务器端和客户端渲染之间的水合不匹配。
来源:packages/svelte/src/internal/server/dev.js,packages/svelte/tests/validator/samples/invalid-self-closing-tag/warnings.json
Svelte 的架构建立在几个关键原则之上:
这些原则指导着编译器和运行时设计,创建了一个优先考虑性能同时保持开发人员生产力的框架。
来源:README.md,packages/svelte/README.md