单包工作区
虽然 Turborepo 在多包工作区(通常称为 monorepos)中非常有效,但它也可以用于加速单包工作区。
Turborepo 最重要的功能在单包工作区中也有效,包括本地和远程缓存以及任务并行化。无效的功能是在单个包上下文中没有意义的功能,例如包任务 (app#build)。
须知:
单包工作区的示例是 npx create-next-app 或 npm create vite 的输出。
安装
在您的应用程序中安装 turbo
使用全局 turbo 运行 package.json 脚本(可选)
为了更快的开发工作流程,您也可以全局安装 turbo,并直接从命令行运行命令。
安装后,您可以运行 turbo build,Turborepo 将运行您 package.json 中的 build 脚本。再次运行 turbo build 将命中缓存。
此时,turbo 并没有提供太多价值,因为您可能只会在代码更改时重新构建应用程序,而当您的代码更改时,turbo 将错过缓存。通过两个简单的步骤,您可以从 turbo 中获得更多。
使用一个命令运行多个脚本
在许多存储库中,有需要运行的设置任务或预构建步骤。这些任务通常一次运行一个——但您可以使用 turbo 轻松地将它们变成一个脚本。
例如,假设您有一个项目,每次开始工作时都必须设置开发环境。您需要
- 启动一个 Docker 容器作为数据库。
- 将数据库模式推送到数据库。
- 使用数据填充数据库。
- 启动开发服务器。
您可以使用 Turborepo 将这些任务安排到一个命令中。首先,在您的 package.json 中创建脚本
然后,在 turbo.json 中创建任务,按顺序运行这些脚本


上述任务中的 dependsOn 数组为任务创建了顺序。当您运行 turbo dev 时,将首先运行 db:up、然后 db:push、然后 db:seed 的脚本。
并行化任务
使用 turbo 并行化任务可以通过同时运行所有任务来加速任务,只要它们可以。例如,您可以同时运行 ESLint、TypeScript 和 Prettier 检查。给定如下脚本
您可以创建如下配置


然后,同时运行所有任务
使用输入优化任务
由于 Turborepo 会将单包工作区视为一个包,因此它可以帮助优化任务的输入,以确保不相关的更改不会导致缓存丢失。
例如,使用 tsc --noEmit 检查类型的脚本可以配置为只包含 TypeScript 文件的输入

