TypeScript的CI/CD流水线:从零开始配置——分步指南
\n\n您编写了一个很棒的TypeScript项目。代码美观,类型严格,逻辑严谨。但每次需要将更新部署到服务器时,您都要手动运行构建,检查是否有问题,并祈祷生产环境不会崩溃。熟悉吗?
\n\n是时候改变这一切了。CI/CD流水线并不是拥有二十年经验的高级开发人员的魔法。它是一个自动化日常工作的工具:代码检查、测试、构建和部署。一次提交到分支——所有内容自动上线,无需紧张。
\n\n在本文中,我们将从零开始为TypeScript项目配置一个完整的CI/CD流水线。以GitHub Actions为例——一个免费且强大的工具。您将学会:
\n- \n
- 添加自动代码检查和格式化 \n
- 运行单元测试和类型检查 \n
- 构建应用程序并部署到远程服务器 \n
- 避免配置CI/CD时的常见错误 \n
准备好了吗?开始吧!
\n\n为什么CI/CD对TypeScript项目至关重要
\n\nTypeScript是一种编译为JavaScript的强类型语言。乍一看,这给人一种安全的错觉:如果代码编译成功,就意味着它能工作。但实际上,编译无法捕获逻辑错误、API问题或混乱的依赖关系。
\n\nCI/CD(持续集成/持续部署)解决了这个问题:
\n- \n
- 自动检查:每次提交都通过流水线——代码检查、测试、编译。如果有问题,您会在几分钟内得知,而不是一周后。 \n
- 统一标准:整个团队遵循相同的规则。没有人会在推送前忘记运行测试。 \n
- 快速部署:不再需要在服务器上手动执行命令。一次合并到main分支——更新就已经在正式网站上了。 \n
对于TypeScript来说,CI/CD尤其重要,因为如果编译配置不正确,类型错误可能只在运行时才会出现。流水线可以防止这种情况。
\n\n步骤1:准备TypeScript项目
\n\n在配置CI/CD之前,请确保项目已准备好自动化。以下是最低要求:
\n- \n
package.json,包含已定义的脚本 \n tsconfig.json——TypeScript配置文件 \n - ESLint和Prettier——用于代码统一 \n
- 测试(Jest、Vitest或Mocha) \n
假设您有一个简单的项目。结构可能如下所示:
\n\nmy-ts-project/\n├── src/\n│ ├── index.ts\n│ └── utils.ts\n├── tests/\n│ └── utils.test.ts\n├── .eslintrc.json\n├── .prettierrc\n├── tsconfig.json\n├── package.json\n└── README.md\n\n\n确保在package.json中定义了脚本:
{\n "scripts": {\n "lint": "eslint src/ tests/ --ext .ts",\n "format": "prettier --check src/ tests/",\n "type-check": "tsc --noEmit",\n "test": "jest",\n "build": "tsc",\n "start": "node dist/index.js"\n }\n}\n\n\n现在项目已准备好进行CI/CD。如果缺少任何内容,请添加。流水线将调用这些命令。
\n\n步骤2:选择CI/CD平台
\n\n有很多选择:Jenkins、GitLab CI、CircleCI、Travis CI。但对于初学者和小型项目,GitHub Actions是最佳选择:
\n- \n
- 内置于GitHub——无需单独配置任何内容 \n
- 免费额度:每月2000分钟(对于私有仓库) \n
- 庞大的现成actions生态系统 \n
- 清晰的YAML语法 \n
如果您的代码托管在GitLab上——请使用GitLab CI(描述几乎相同)。但本文使用GitHub。
\n\n步骤3:创建CI/CD流水线——第一个文件
\n\n在项目根目录下创建文件夹.github/workflows/,并在其中创建文件ci.y