本文档概述了 TypeScript 项目的基础架构,包括构建系统、CI/CD 管道和测试框架。这些组件支持 TypeScript 编译器及其相关工具的开发、测试和发布。
有关编译器本身架构的信息,请参阅编译器核心。有关 TypeScript 语言服务(language service)的详细信息,请参阅语言服务。
TypeScript 使用基于Hereby 的自定义构建系统。构建系统负责
构建系统在 Herebyfile.mjs 中定义,该文件声明了一组可以通过 package.json 中定义的 npm 脚本执行的任务。
来源:Herebyfile.mjs42-671 package.json88-103
TypeScript 构建系统使用分层的任务结构,其中更高级别的任务依赖于更低级别的任务。构建过程通过 Herebyfile 中定义的各种任务进行协调。
来源:Herebyfile.mjs133-671 package.json90-102
TypeScript 构建系统包含几项重要任务:
| 任务 | 描述 |
|---|---|
本地 | 构建完整的编译器和语言服务 |
min | 仅构建 tsc 和 tsserver |
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 构建过程创建了几个捆绑包和输出:
构建系统结合使用了 TypeScript 自身的编译器和 esbuild 进行捆绑。
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 工作流在每次推送到 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
有几个工作流支持发布流程:
这些工作流自动化了 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 拥有全面的测试基础架构,包括:
来源: src/testRunner/runner.ts1-197 src/harness/runnerbase.ts1-66 src/harness/harnessIO.ts1-1020 src/testRunner/parallel/host.ts1-680
测试基础设施围绕模块化的测试运行器系统构建
测试系统采用基线方法来验证编译器输出、类型、错误等是否正确。
来源: src/testRunner/runner.ts21-74 src/harness/runnerbase.ts22-65
TypeScript 的测试系统通过分布式工作节点架构支持并行测试执行。
并行测试系统将测试分配给多个进程以加快测试执行速度。它包括:
来源: src/testRunner/parallel/host.ts35-340 src/testRunner/parallel/worker.ts20-80
测试基础设施包括一个虚拟文件系统和 IO 抽象来支持测试。
这允许测试在隔离环境中运行,而不会影响真实的文件系统。
来源: src/harness/harnessIO.ts17-157 src/harness/fakesHosts.ts24-243
TypeScript 使用结构化的版本控制和发布流程
src/compiler/corePublic.ts 中来源: 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.json | TypeScript 基础配置 |
tsconfig.json | 项目引用配置 |
launch.template.json | VS Code 调试配置模板 |
settings.template.json | VS 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 项目利用了多种工具来维护代码质量
来源: package.json41-85 .dprint.jsonc1-61 scripts/eslint/rules/jsdoc-format.cjs1-15
TypeScript 包含安全扫描和合规性工作流
这些工具帮助识别和解决代码库中的安全漏洞。
来源: .github/workflows/codeql.yml1-74 .github/workflows/scorecard.yml1-61
TypeScript 的基础设施为开发、测试和发布 TypeScript 编译器和工具提供了强大的基础。模块化的构建系统、全面的测试框架和自动化的 CI/CD 管道确保了 TypeScript 版本发布的稳定性和质量。
有关基础设施特定组件的更详细信息,请参阅