菜单

构建系统

相关源文件

RealWorld 项目在其 monorepo 结构中,使用 Turborepo (Turbo) 作为构建系统来协调开发和生产工作流。本文档将解释构建系统的配置、架构和工作流。

有关特定于部署的说明,请参阅 部署

构建系统架构

构建系统以 Turborepo 为中心,这是一种用于 JavaScript/TypeScript monorepo 的高性能构建系统,由 pnpm 作为包管理器进行管理。

来源: package.json24-28 turbo.json1-17 Procfile1

配置文件

turbo.json

turbo.json 文件定义了任务管道和执行规则

关键配置要素

配置描述
globalDependencies触发所有任务重建的文件(环境变量文件)
tasks.build.dependsOn^build”表示此任务依赖于所有依赖项的构建任务
tasks.lint.dependsOn^lint”表示此任务依赖于所有依赖项的 lint 任务
tasks.dev.cachefalse 禁用开发任务的缓存
tasks.dev.persistenttrue 使任务保持在 watch 模式下运行

来源: turbo.json1-17

package.json

根目录的 package.json 文件定义了调用 Turbo 的主要脚本

脚本命令描述
buildturbo build构建 monorepo 中的所有应用程序
devturbo dev启动所有应用程序的开发服务器
lintturbo lint为所有应用程序运行 linting
formatprettier --write "**/*.{ts,tsx,md}"使用 Prettier 格式化代码

系统要求

要求版本
Node.js>= 18
pnpm8.9.0

来源: package.json24-36

Procfile

Procfile 定义了 Heroku 等平台的部署命令

web: cd apps/api && npx prisma generate && && pnpm build && pnpm start

此序列

  1. 将目录更改为 API 应用程序
  2. 生成 Prisma 客户端
  3. 构建 API
  4. 启动 API 服务器

来源: Procfile1

构建工作流

开发工作流

开发工作流提供了一个带有热重载的实时反馈循环

dev 任务使用 Turbo 的 persistent: true 设置,使服务器保持在 watch 模式下运行。

来源: package.json26 turbo.json12-15

生产构建工作流

生产构建遵守 Turbo 中定义的依赖图

来源: package.json25 turbo.json5-8

任务依赖系统

Turbo 的依赖表示确保任务按正确的顺序运行

dependsOn 中,^ 前缀指示 Turbo 在运行当前包的任务之前,先在所有依赖项上运行指定任务。

来源: turbo.json5-11

使用构建系统

与 RealWorld 构建系统一起工作的常用命令

命令目的
pnpm run dev启动开发环境
pnpm run build构建生产版本
pnpm run lint运行 linting 检查
pnpm run format使用 Prettier 格式化代码

来源: package.json24-28

Monorepo 结构

构建系统与此存储库结构协同工作

这种 monorepo 结构使 Turbo 能够有效地管理应用程序之间的依赖关系并优化构建过程。

来源: package.json1-38 turbo.json1-17