菜单

Turbo 配置

相关源文件

目的与范围

本文档提供了 RealWorld 项目中 Turbo 构建系统配置的详细信息。它涵盖了 Turbo 的配置方式、任务定义以及它如何协调整个项目的构建过程。有关部署的信息,请参阅 部署

RealWorld 中的 Turbo 概述

Turbo 是一个高性能的构建系统,专为 JavaScript/TypeScript monorepos 设计,通过智能缓存和并行化来优化构建时间。在 RealWorld 项目中,Turbo 协调多个应用程序的构建过程,确保依赖项按正确的顺序构建。

标题:RealWorld 项目结构中的 Turbo 配置

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

Turbo 安装和设置

Turbo 作为 RealWorld 项目的开发依赖安装。该项目使用 pnpm 作为其包管理器,并有特定的版本要求。

配置项
依赖版本最新(如 package.json 中所述)
包管理器pnpm@8.9.0
Node 要求>=18

来源:package.json30-33 package.json34-37

Turbo 配置文件的内容

turbo.json 文件包含构建系统的核心配置

标题:turbo.json 配置结构

来源:turbo.json1-17

Schema 和全局依赖

配置使用了 Turbo schema,并将环境文件定义为全局依赖,这意味着对这些文件的更改将使所有任务的缓存失效。

$schema: "https://turbo.net.cn/schema.json"
globalDependencies: ["**/.env.*local"]

来源:turbo.json2-3

任务配置

turbo.json 文件定义了三个主要任务

  1. build:为生产环境编译项目

    • 依赖于所有依赖项的 build 任务(^build
    • 不为缓存指定输出文件
  2. lint:对代码库运行 linting 工具

    • 依赖于所有依赖项的 lint 任务(^lint
  3. dev:在开发模式下运行项目

    • 缓存已禁用(cache: false
    • 持续运行(persistent: true)以支持持续开发

来源:turbo.json4-16

NPM 脚本集成

根目录下的package.json将 Turbo 集成到项目的 npm 脚本中,为开发人员提供了用于构建、开发和 lint 项目的简单命令。

标题:Turbo 命令执行流程

来源:package.json24-28

脚本命令Turbo 命令目的
pnpm buildturbo build按正确的顺序构建所有应用程序
pnpm devturbo dev为所有应用程序启动开发服务器
pnpm lintturbo lint对所有应用程序运行 linting 工具

来源:package.json24-28

部署集成

在部署过程中,Turbo 通过 build 脚本间接使用。Procfile 显示了构建过程如何集成到部署工作流程中。

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

此命令更改目录到 API 应用程序,生成 Prisma 客户端,构建应用程序(该应用程序内部使用 Turbo),然后启动服务器。

来源:Procfile1

任务依赖和执行顺序

Turbo 根据依赖项配置管理任务的执行顺序。dependsOn 中的^符号表示该任务依赖于工作区中所有依赖项的相同任务。

标题:Turbo 任务执行流程

来源:turbo.json5-11

总结

RealWorld 项目中的 Turbo 配置提供了一个精简的构建系统,用于:

  1. 高效构建多个应用程序,并按正确的依赖顺序执行
  2. 通过持续开发服务器简化开发流程
  3. 跨代码库实现标准化的 linting

配置极简但有效,专注于开发、构建和代码质量所需的核心任务。

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