菜单

开发者工具

相关源文件

本页面介绍了 Svelte 框架内可用的开发者工具和实用程序,以辅助开发、调试、错误检测和代码质量保证。它涵盖了 Svelte 的错误和警告系统、TypeScript 集成以及用于测试、迁移和贡献工作流的工具。

错误和警告系统

Svelte 提供了全面的错误和警告系统,可帮助开发人员在编译和运行时期间识别代码中的问题。

错误系统架构

错误系统流程图

来源:packages/svelte/scripts/process-messages/index.js packages/svelte/src/internal/client/errors.js packages/svelte/messages/client-errors/errors.md

Svelte 的错误系统旨在为开发人员提供清晰、可操作的反馈。错误消息在 Markdown 文件中定义,由构建系统处理,然后通过生成的 JavaScript 模块公开。每条错误消息都包含:

  1. 唯一的代码标识符
  2. 人类可读的消息,通常带有用于动态内容的占位符
  3. 指向文档的 URL 链接(例如,https://svelte.net.cn/e/error_code

错误系统同时处理编译时错误(在组件编译期间检测到)和运行时错误(在组件执行期间遇到)。

警告系统

警告系统架构

来源:packages/svelte/src/internal/client/warnings.js packages/svelte/messages/client-warnings/warnings.md packages/svelte/src/internal/client/dev/ownership.js

警告会提醒开发人员潜在的问题,这些问题不会阻止代码执行,但可能导致错误或次优行为。Svelte 的警告系统包含多个类别:

  1. 可访问性 (A11y) 警告:识别组件模板中的可访问性问题
  2. 状态响应性警告:突出显示 Svelte 响应性系统中的潜在问题
  3. 水合警告:警告服务器渲染内容与客户端内容不匹配
  4. API 使用警告:标记已弃用或误用的 API 功能

开发模式功能

在开发模式下,Svelte 会用额外的上下文信息丰富错误和警告消息:

  • 文件位置和行号,方便调试
  • 问题的详细解释
  • 修复建议
  • 相关文档链接

开发相关的代码通常位于 dev 子目录中,并根据 esm-env 包中的 DEV 环境变量进行条件包含。

状态调试和验证

Svelte 提供了专门用于调试响应式状态和验证组件所有权模式的工具。

状态检查工具

来源:packages/svelte/src/internal/client/dev/ownership.js packages/svelte/messages/client-warnings/warnings.md

Svelte 提供了用于调试响应式状态的专用工具

  1. $inspect Rune:允许跟踪随时间变化的响应性
  2. $state.snapshot():为调试创建一个响应式值的非响应式快照

此外,Svelte 还包含一个所有权验证系统,有助于强制执行正确的组件边界。

  • 所有权验证:检查是否对从父组件传递的 prop 进行了不当修改
  • 绑定验证:确保绑定链在组件之间没有中断

控制台集成

当开发人员尝试使用 console.log() 直接记录响应式状态时,Svelte 会发出警告,指出此方法可能不会显示预期值,因为浏览器控制台显示的是代理而不是底层响应式值。它建议改用 $inspect$state.snapshot()

TypeScript 集成

Svelte 提供全面的 TypeScript 支持,以增强开发人员通过类型安全的体验。

类型定义架构

来源:packages/svelte/scripts/generate-types.js .github/workflows/ci.yml

Svelte 的 TypeScript 集成包括:

  1. 类型定义生成:一个构建时过程,用于生成 TypeScript 声明文件
  2. 包特定类型:Svelte 包各种入口点的类型定义
  3. 持续集成:验证类型正确性的 CI 工作流

类型生成过程使用 dts-buddy 从源 .d.ts 文件创建捆绑的类型定义。这可确保代码库的一致性,并使用 @internal JSDoc 标签移除内部 API 的公共类型定义。

测试和 CI/CD 基础架构

Svelte 维护一个强大的测试和持续集成系统,以确保代码质量。

测试基础设施

来源:.github/workflows/ci.yml .github/workflows/release.yml CONTRIBUTING.md

Svelte 的测试基础架构包括:

  1. 测试类别:

    • 针对独立组件的单元测试
    • 组件交互的集成测试
    • 警告和错误检测的验证器测试
    • 性能监控的基准测试
  2. CI 工作流:

    • 在拉取请求上自动执行测试
    • 代码 linting 以确保代码风格一致性
    • 类型检查以验证类型正确性
    • 基准测试以监控性能影响
  3. 发布流程:

    • Changesets 用于版本管理
    • 用于 npm 发布和自动发布的工作流

开发预览系统

Svelte 提供了一个用于轻松测试开发版本的系统。

来源:.github/workflows/pkg.pr.new.yml .github/workflows/pkg.pr.new-comment.yml

对于每个拉取请求,Svelte 会自动:

  1. 构建包的开发版本
  2. 提供用于测试这些版本的安装命令
  3. 创建带有 PR 版本的 Playground URL 以方便测试

此系统允许贡献者和审阅者在合并更改之前轻松测试它们。

迁移工具

Svelte 提供工具以帮助开发人员在版本之间迁移并检测已弃用的模式。

迁移支持

来源:packages/svelte/src/internal/client/dev/legacy.js packages/svelte/messages/client-errors/errors.md

Svelte 提供了多种迁移工具

  1. 迁移命令sv migrate 命令可以将代码转换为符合新语法模式
  2. 兼容性选项:用于维护与旧模式兼容性的编译器选项
  3. 已弃用功能的警告:使用已弃用功能时会发出清晰的警告
  4. API 更改检测:运行时检测和 API 更改警告

主要的迁移相关警告包括:

  • 组件 API 更改(从类到函数)
  • Slot 元素弃用
  • 事件指令语法更改

贡献工作流程

Svelte 具有结构化的贡献者工作流程,供其遵循以提交更改。

贡献流程

来源:CONTRIBUTING.md .github/PULL_REQUEST_TEMPLATE.md .github/workflows/release.yml

Svelte 的贡献工作流包括:

  1. 问题或 RFC 创建:从问题描述或 RFC 开始进行较大更改
  2. 本地开发:设置和本地实现更改
  3. 测试:在提交前在本地运行测试和 linting
  4. Pull Request:创建带有清晰描述和测试计划的 PR
  5. CI 检查:自动验证代码质量、类型和测试
  6. Changesets:添加 changeset 文件以记录发布说明的更改
  7. 审查和合并:代码审查过程和最终合并

常见的开发者故障排除任务

任务工具/方法描述
调试状态响应性$inspect用于跟踪响应式值随时间的变化
分析状态结构$state.snapshot()为响应式状态创建时间点快照
查找水合问题水合警告查找服务器和客户端不匹配的警告
修复所有权问题所有权警告处理不当的 prop 修改警告
检查可访问性 (a11y) 问题可访问性 (a11y) 警告在控制台中查看可访问性警告
测试 PR 更改pkg.pr.new使用提供的 playground 链接或安装命令
运行类型检查pnpm check验证 TypeScript 类型正确性
验证测试通过pnpm test在本地运行测试套件

来源: CONTRIBUTING.md packages/svelte/messages/client-warnings/warnings.md

结论

Svelte 提供了一套全面的开发工具,有助于调试、错误检测、测试和代码质量保证。这些工具旨在为开发人员提供清晰、可操作的反馈,并全程保持项目高标准的代码质量。