菜单

基础设施

相关源文件

本文档概述了 TypeScript 项目的基础架构,包括构建系统、CI/CD 管道和测试框架。这些组件支持 TypeScript 编译器及其相关工具的开发、测试和发布。

有关编译器本身架构的信息,请参阅编译器核心。有关 TypeScript 语言服务(language service)的详细信息,请参阅语言服务

构建系统概述

TypeScript 使用基于Hereby 的自定义构建系统。构建系统负责

  1. 编译 TypeScript 源代码
  2. 生成声明文件和类型定义
  3. 构建库和工具
  4. 运行测试
  5. 创建发布包

构建系统在 Herebyfile.mjs 中定义,该文件声明了一组可以通过 package.json 中定义的 npm 脚本执行的任务。

来源:Herebyfile.mjs42-671 package.json88-103

构建任务结构

TypeScript 构建系统使用分层的任务结构,其中更高级别的任务依赖于更低级别的任务。构建过程通过 Herebyfile 中定义的各种任务进行协调。

来源:Herebyfile.mjs133-671 package.json90-102

主要构建任务

TypeScript 构建系统包含几项重要任务:

任务描述
本地构建完整的编译器和语言服务
min仅构建 tsctsserver
tests构建测试基础架构
lint对编译器和脚本源文件运行 ESLint
format使用 dprint 格式化代码库
generate-diagnostics从 JSON 输入生成诊断文件
lib构建库目标(lib.d.ts 文件)
lkg创建“最后已知良好”构建(Last Known Good build)
clean清理所有构建输出

来源:Herebyfile.mjs45-605 package.json90-102

构建流程

TypeScript 构建过程创建了几个捆绑包和输出:

  1. tsc:TypeScript 编译器二进制文件
  2. typescript.js:核心 TypeScript 库
  3. tsserver.js:TypeScript 语言服务器
  4. lib.*.d.ts:标准库定义文件
  5. tsserverlibrary.js:TypeScript 语言服务库

构建系统结合使用了 TypeScript 自身的编译器和 esbuild 进行捆绑。

来源:Herebyfile.mjs416-464

持续集成和部署

TypeScript 使用 GitHub Actions 进行 CI/CD。该管道自动化了测试、代码检查(linting)和发布流程。

来源:.github/workflows/ci.yml1-341 .github/workflows/nightly.yaml1-66 .github/workflows/insiders.yaml1-66 .github/workflows/new-release-branch.yaml1-96 .github/workflows/set-version.yaml1-100 .github/workflows/sync-branch.yaml1-77 .github/workflows/lkg.yml1-50

CI 工作流

CI 工作流在每次推送到 main 和 release 分支以及 pull request 时运行。它包含几个作业:

作业描述
test在不同的操作系统和 Node.js 版本上运行测试
coverage生成代码覆盖率报告
lint使用 ESLint 检查代码
knip检查未使用的导出
format使用 dprint 检查代码格式
browser-integration测试浏览器兼容性
typecheck对代码库进行类型检查
smoke执行烟雾测试
package-size将包大小与基线进行比较
misc运行杂项检查
self-check测试自构建能力
baselines验证测试基线

来源:.github/workflows/ci.yml22-341

发布工作流

有几个工作流支持发布流程:

  1. new-release-branch.yaml:创建新的发布分支并更新版本
  2. set-version.yaml:更新现有分支中的版本
  3. sync-branch.yaml:将发布分支与 main 同步
  4. lkg.yml:更新“最后已知良好”构建
  5. release-branch-artifact.yaml:创建可发布的包
  6. nightly.yaml:将夜间构建发布到 npm
  7. insiders.yaml:将内部构建发布到 npm

这些工作流自动化了 TypeScript 版本创建和发布的流程。

来源:.github/workflows/new-release-branch.yaml1-96 .github/workflows/set-version.yaml1-100 .github/workflows/sync-branch.yaml1-77 .github/workflows/lkg.yml1-50 .github/workflows/release-branch-artifact.yaml1-51 .github/workflows/nightly.yaml1-66 .github/workflows/insiders.yaml1-66

测试基础设施

TypeScript 拥有全面的测试基础架构,包括:

  1. 单元测试
  2. 集成测试
  3. 编译器测试
  4. 语言服务测试

来源: src/testRunner/runner.ts1-197 src/harness/runnerbase.ts1-66 src/harness/harnessIO.ts1-1020 src/testRunner/parallel/host.ts1-680

测试运行器架构

测试基础设施围绕模块化的测试运行器系统构建

  1. RunnerBase:所有测试运行器的抽象基类
  2. CompilerBaselineRunner:处理编译器测试
  3. FourSlashRunner:处理 FourSlash 测试(模拟交互式编辑器)
  4. ProjectRunner:处理项目测试
  5. TranspileRunner:处理转译测试

测试系统采用基线方法来验证编译器输出、类型、错误等是否正确。

来源: src/testRunner/runner.ts21-74 src/harness/runnerbase.ts22-65

并行测试

TypeScript 的测试系统通过分布式工作节点架构支持并行测试执行。

并行测试系统将测试分配给多个进程以加快测试执行速度。它包括:

  1. Host:协调测试执行并收集结果
  2. Workers:执行测试并报告结果
  3. Task Distribution:根据预估成本将测试分配给工作节点

来源: src/testRunner/parallel/host.ts35-340 src/testRunner/parallel/worker.ts20-80

测试 IO 系统

测试基础设施包括一个虚拟文件系统和 IO 抽象来支持测试。

  1. IO Interface:抽象化文件系统操作以进行测试
  2. FakesHost:提供编译器依赖项的模拟实现
  3. VirtualFileSystem:在内存中模拟文件系统

这允许测试在隔离环境中运行,而不会影响真实的文件系统。

来源: src/harness/harnessIO.ts17-157 src/harness/fakesHosts.ts24-243

版本控制和发布流程

TypeScript 使用结构化的版本控制和发布流程

  1. 版本定义:维护在 src/compiler/corePublic.ts
  2. 发布分支:通过工作流为每个版本创建
  3. LKG (Last Known Good):已知的、可以工作的编译器快照
  4. 发布渠道:
    • Nightly:来自主分支的每日构建
    • Insiders:发布前的预览构建
    • Release:稳定版本

来源: src/compiler/corePublic.ts1-48 .github/workflows/nightly.yaml1-66 .github/workflows/insiders.yaml1-66 .github/workflows/new-release-branch.yaml1-96

配置和工具

TypeScript 的构建环境使用了几个配置文件和工具

文件目的
package.json项目依赖和脚本
.dprint.jsonc代码格式化配置
tsconfig-base.jsonTypeScript 基础配置
tsconfig.json项目引用配置
launch.template.jsonVS Code 调试配置模板
settings.template.jsonVS Code 设置模板

来源: package.json1-119 .dprint.jsonc1-61 src/tsconfig-base.json1-33 src/tsconfig.json1-22 .vscode/launch.template.json1-30 .vscode/settings.template.json1-25

开发工具

TypeScript 项目利用了多种工具来维护代码质量

  1. ESLint:静态代码分析和代码检查
  2. dprint:代码格式化
  3. Mocha:单元测试的测试运行器
  4. Hereby:构建脚本的任务运行器
  5. esbuild:JavaScript 打包器

来源: package.json41-85 .dprint.jsonc1-61 scripts/eslint/rules/jsdoc-format.cjs1-15

安全基础设施

TypeScript 包含安全扫描和合规性工作流

  1. CodeQL:代码安全分析
  2. Scorecard:供应链安全检查

这些工具帮助识别和解决代码库中的安全漏洞。

来源: .github/workflows/codeql.yml1-74 .github/workflows/scorecard.yml1-61

结论

TypeScript 的基础设施为开发、测试和发布 TypeScript 编译器和工具提供了强大的基础。模块化的构建系统、全面的测试框架和自动化的 CI/CD 管道确保了 TypeScript 版本发布的稳定性和质量。

有关基础设施特定组件的更详细信息,请参阅