Skip to content

RFC: 弃用 Svelte #4

@tcdw

Description

@tcdw

背景

Koi 博客模板目前采用 Svelte(现为 v5)实现部分交互(如导航栏)。Svelte 5 引入了 Runes 等新响应式语法,并增加了运行时代码,这让 Svelte 不再主打「无运行时」特色。同时,Svelte 5 的工具链和生态问题在实际项目中浮现,包括 hook 复用困难、测试不便、生态库兼容问题、需要特殊文件后缀编译等。

现状分析

  • 项目实际只用 Svelte 实现 HeaderNav.svelte,用于响应式导航与移动端菜单动画。
  • 组件功能并不复杂,DOM 操作和交互偏基础,理论上可用纯 Vanilla JS 或其它框架实现(如 SolidJS、Preact、React 等)。
  • 当前 Svelte 用法涉及少量状态管理、事件监听与动画,属于轻交互。

方案选项

  1. Vanilla JS 实现

    • 优点:零依赖,极致轻量,无运行时包袱。
    • 缺点:代码略冗长、失去模板语法,但对当前规模影响有限。
  2. 迁移到其它轻量现代前端框架(如 SolidJS)

    • 优点:保持组件化和响应式语法,生态更活跃,JSX/TSX 支持好。
    • 缺点:增加一层依赖,但可能更现代、兼容性好。
  3. 暂时维持现状,仅修复已知问题

    • 优点:无重构成本,继续复用现有代码。
    • 缺点:需忍受 Svelte 5 的种种约束,未来风险保留。

对比分析

方案 上手/维护难度 运行时代码体积 工具链复杂度 演进可持续性
Vanilla JS ★★ ★★★★ ★★★★ ★★★
SolidJS ★★★ ★★★ ★★★ ★★★★
Svelte 5 ★★★

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions