turborepo的turbo.json笔记
type
status
date
slug
summary
tags
category
icon
password
 

🏗️ 1. build 任务配置

  • dependsOn: ["^build"] 表示当前包的构建任务依赖于其所有下游依赖包的构建任务(通过 ^ 符号实现)。例如,若包 A 依赖包 B,则执行 A 的 build 前会先执行 B 的 build,确保依赖项已就绪。
  • outputs: [".next/**", "!.next/cache/**"]
    • ".next/**":缓存 Next.js 构建产物(如预渲染页面、静态资源)。
    • "!.next/cache/**":排除 .next/cache 目录(临时文件,无需缓存)。 作用:避免重复构建,后续执行命中缓存时直接复用结果。

🔍 2. check-types 任务配置

  • dependsOn: ["^check-types"]build 类似,表示类型检查需按依赖顺序执行。例如包 A 依赖包 B,则先检查 B 的类型定义,再检查 A,避免因依赖类型错误导致误报。

⚙️ 3. dev 任务配置

  • persistent: true 标识此任务为长期运行进程(如开发服务器),Turbo 不会自动终止它,需手动结束。
  • cache: false 禁用缓存机制,因为开发服务器每次启动需加载最新代码(缓存会导致代码更新不生效)。

⚙️ 4. UI 模式

tui是将库分开显示
 

你也可以更具体地说明依赖任务,将其限制为某个特定的包
notion image
使用此配置,只有在 utils 包中的 build 任务完成后,才能运行你的 web 包中的 lint 任务。
 

使用包配置

包配置 是直接放置在包中的 turbo.json 文件。这允许包为其自己的任务定义特定行为,而不会影响仓库的其余部分。
在拥有许多团队的大型 monorepo 中,这允许团队对其自己的任务进行更大的控制。要了解更多信息,请访问 包配置文档

具有运行时依赖的长时任务

你可能有一个长时间运行的任务,需要另一个任务始终同时运行。为此,请使用 with 键
notion image
./apps/web/turbo.json
长时间运行的任务永远不会退出,这意味着你不能依赖它。相反,with 关键字将在 web#dev 任务运行时运行 api#dev 任务。

在 `dev` 之前运行设置任务

你可能还想运行一些脚本来设置你的开发环境或预构建软件包。你可以使用 `dependsOn` 确保这些任务在 `dev` 任务之前运行
notion image
./turbo.json
 
 
 

开发应用程序

在 Monorepo 中开发应用程序可以解锁强大的工作流程,使你能够进行原子提交到源代码控制,并轻松访问代码。
大多数开发任务都是长时间运行的任务,它们会监视代码的更改。Turborepo 通过强大的终端 UI 和其他功能(例如)增强了这种体验

配置开发任务

在 `turbo.json` 中定义一个开发任务会告诉 Turborepo 你将要运行一个长时间运行的任务。这对于运行开发服务器、运行测试或构建应用程序等操作非常有用。
要注册一个 `dev` 任务,请将其添加到你的 `turbo.json` 中,并带有两个属性
notion image
./turbo.json
{ "tasks": { "dev": { "cache": false, "persistent": true } }}
  • "cache": false: 告诉 Turborepo 不要尝试缓存任务的结果。由于这是一个开发任务,你可能会频繁更改代码,因此缓存结果没有用处。
  • "persistent": true: 告诉 Turborepo 让任务持续运行直到你停止它。这个键作为终端 UI 的信号,将该任务视为长时间运行且可交互的任务。此外,它可以防止你意外地依赖于一个不会退出的任务。
现在你可以运行你的 `dev` 任务以并行启动你的开发脚本
终端
turbo dev

在 `dev` 之前运行设置任务

你可能还想运行一些脚本来设置你的开发环境或预构建软件包。你可以使用 `dependsOn` 确保这些任务在 `dev` 任务之前运行
notion image
./turbo.json
{ "tasks": { "dev": { "cache": false, "persistent": true, "dependsOn": ["//#dev:setup"] }, "//#dev:setup": { "outputs": [".codegen/**"] } }}
在这个例子中,我们使用了 根任务,但你也可以将相同的想法用于 软件包中的任意任务

运行特定应用程序

`--filter` 标志允许你选择你的 软件包图 的子集,以便你可以为特定的应用程序及其依赖项运行你的 `dev` 任务
终端
turbo dev --filter=web
 

监听模式

许多工具都有内置的监听器,例如 `tsc --watch`,它们会对源代码中的更改做出响应。但是,有些工具没有。
`turbo watch` 为任何工具添加了一个依赖项感知的监听器。源代码的更改将遵循你在 `turbo.json` 中描述的 任务图,就像你的所有其他任务一样。
例如,使用像 `create-turbo` 这样的包结构,以及以下任务和脚本
turbo.jsonpackages/uiapps/web
turbo.json
当你运行 `turbo watch dev lint` 时,你会看到每当你更改源代码时,`lint` 脚本都会重新运行,尽管 ESLint 没有内置监听器。`turbo watch` 也知道内部依赖关系,因此 `@repo/ui` 中的代码更改将重新运行 `@repo/ui` 和 `web` 中的任务。
`web` 中的 Next.js 开发服务器和 `@repo/ui` 中 TypeScript 编译器的内置监听器将继续像往常一样工作,因为它们被标记为 `persistent`。
有关更多信息,请访问 `turbo watch` 参考文档

© ittat 2016-2025