配置 turbo.json
通过在你的 Workspace 的根目录中添加 turbo.json
文件来配置 turbo
的行为。
全局选项
extends
从根目录 turbo.json
扩展,以使用包配置为包创建特定配置。
extends
的唯一有效值是["//"]
,用于从根目录turbo.json
继承配置。- 如果在根目录
turbo.json
中使用extends
,它将被忽略。
globalDependencies
你想要包含在所有任务哈希中的 glob 列表。如果任何匹配这些 glob 的文件发生更改,所有任务都将错过缓存。 Glob 相对于 turbo.json
的位置。
默认情况下,Workspace 根目录中源代码控制中的所有文件都包含在全局哈希中。
Glob 必须位于仓库的源代码控制根目录中。不支持仓库外部的 Glob。
globalEnv
你想要影响所有任务哈希的环境变量列表。对这些环境变量的任何更改都将导致所有任务错过缓存。
有关通配符和否定语法的更多信息,请参阅 env
部分。
globalPassThroughEnv
你想要提供给任务的环境变量列表。使用此键会将所有任务选择加入严格环境变量模式。
此外,Turborepo 具有一组内置的全局传递变量,用于常见情况,例如操作系统环境变量。这包括诸如 HOME
、PATH
、APPDATA
、SHELL
、PWD
等变量。完整列表可以在源代码中找到。
ui
默认值: "stream"
为仓库选择终端 UI。
"tui"
允许一次查看每个日志并与任务交互。 "stream"
按日志到达的顺序输出日志,并且不可交互。
dangerouslyDisablePackageManagerCheck
默认值: false
Turborepo 使用你的仓库的 lockfile 来确定缓存行为、包图等。因此,我们使用packageManager
字段来帮助你稳定你的 Turborepo。
为了帮助增量迁移或在你无法使用 packageManager
字段的情况下,你可以使用 --dangerously-disable-package-manager-check
来选择退出此检查并承担不稳定的 lockfile 产生不可预测行为的风险。禁用后,Turborepo 将尝试尽最大努力发现仓库的预期包管理器。
你也可以通过 flag
或 TURBO_DANGEROUSLY_DISABLE_PACKAGE_MANAGER_CHECK
环境变量选择退出此检查。
cacheDir
默认值: ".turbo/cache"
指定文件系统缓存目录。
daemon
默认值: true
Turborepo 运行一个后台进程来预先计算一些开销大的操作。此独立进程(守护程序)是一种性能优化,而不是 turbo
正常运行所必需的。
须知:
在 CI 环境中运行时,无论此设置如何,守护程序始终处于禁用状态。
envMode
默认值: "strict"
Turborepo 的环境模式允许你控制在运行时哪些环境变量可用于任务
"strict"
: 筛选环境变量,仅保留在turbo.json
的env
和globalEnv
键中指定的那些变量。"loose"
: 允许进程的所有环境变量都可用。
阅读更多关于环境模式的信息。
tags
实验性
为包添加标签,以便与边界一起使用。
此键仅在包配置中有效。在根目录 turbo.json
中使用此键将导致错误。
定义任务
tasks
tasks
对象中的每个键都是一个任务的名称,可以使用turbo run
执行。Turborepo 将在你的Workspace 配置中描述的包中搜索 package.json
中具有任务名称的脚本。
使用任务中描述的其余配置,Turborepo 将按描述的顺序运行脚本,并在提供时在outputs
键中缓存日志和文件输出。
在下面的示例中,我们在 tasks
键下定义了三个任务:build
、test
和 dev
。
任务选项
使用你在 tasks
中定义的任务中可用的选项,你可以描述 turbo
将如何运行你的任务。
dependsOn
任务开始运行之前需要完成的任务列表。
有三种类型的 dependsOn
关系:依赖关系、同包关系和任意任务关系。
依赖关系
在 dependsOn
中以 ^
开头的字符串告诉 turbo
,任务必须等待包的依赖项中的任务首先完成。例如,在下面的 turbo.json
中
turbo
从包图的“底部”开始,并递归访问每个包,直到找到没有内部依赖项的包。然后,它将首先在依赖链的末尾运行 build
任务,然后按顺序返回到“顶部”,直到所有 build
任务都完成。
同包关系
没有 ^
前缀的任务名称描述了依赖于同一包内不同任务的任务。例如,在下面的 turbo.json
中
只有在 lint
和 build
任务在同一包中完成后,test
任务才会运行。
任意任务关系
指定特定包任务之间的任务依赖关系。
在此 turbo.json
中,web#lint
任务将等待 utils#build
任务完成。
env
任务依赖的环境变量列表。
须知:
Turborepo 通过框架推断自动包含以常见框架为前缀的环境变量。例如,如果你的包是 Next.js 项目,则无需指定任何以 NEXT_PUBLIC_
开头的环境变量。
通配符
Turborepo 支持环境变量的通配符,因此你可以轻松地处理具有给定前缀的所有环境变量。例如,下面的 turbo.json
将所有以 MY_API_
开头的环境变量包含到哈希中
否定
前导 !
表示整个模式将被否定。例如,下面的 turbo.json
将忽略 MY_API_URL
变量。
示例
模式 | 描述 |
---|---|
"*" | 匹配每个环境变量。 |
"!*" | 排除每个环境变量。 |
"FOO*" | 匹配 FOO 、FOOD 、FOO_FIGHTERS 等。 |
"FOO\*" | 解析为 "FOO*" 并匹配 FOO 、FOOD 和 FOO_FIGHTERS 。 |
"FOO\\*" | 匹配名为 FOO* 的单个环境变量。 |
"!FOO*" | 排除所有以 FOO 开头的环境变量。 |
"\!FOO" | 解析为 "!FOO" ,并排除名为 !FOO 的单个环境变量。 |
"\\!FOO" | 匹配名为 !FOO 的单个环境变量。 |
"FOO!" | 匹配名为 FOO! 的单个环境变量。 |
passThroughEnv
应该在此任务的运行时中可用的环境变量的允许列表,即使在严格环境模式下也是如此。
outputs
相对于包的 package.json
的文件 glob 模式列表,用于在任务成功完成后缓存。
如果输出路径需要相对于仓库根目录,请参阅$TURBO_ROOT$
。
省略此键或传递空数组会告诉 turbo
不缓存任何内容(日志除外,启用缓存后始终会缓存日志)。
cache
默认值: true
定义是否应缓存任务输出。将 cache
设置为 false 对于长时间运行的开发任务以及确保任务始终在其任务执行图中运行时非常有用。
inputs
默认值: []
,包中签入源代码控制的所有文件
相对于包的 package.json
的文件 glob 模式列表,用于在确定包是否已更改时考虑。 turbo.json
始终被视为输入。
访问文件 glob 规范以获取有关 glob 语法的更多信息。
使用 inputs
键会使你退出 turbo
考虑 .gitignore
的默认行为。你必须根据需要从 .gitignore
重构 glob,或者使用 $TURBO_DEFAULT$
来构建默认行为。
$TURBO_DEFAULT$
由于指定 inputs
键会立即退出默认行为,因此你可以在 inputs
数组中使用特殊字符串 $TURBO_DEFAULT$
来恢复 turbo
的默认行为。这允许你调整默认行为以获得更精细的粒度。
$TURBO_ROOT$
任务可能会引用位于其目录之外的文件。
以 $TURBO_ROOT$
开头的文件 glob 将更改 glob 以使其相对于仓库的根目录而不是包目录。
outputLogs
默认值: full
设置输出日志记录详细程度。 可以通过 --output-logs
CLI 选项覆盖。
选项 | 描述 |
---|---|
full | 显示所有日志 |
hash-only | 仅显示任务的哈希值 |
new-only | 仅显示缓存未命中的日志 |
errors-only | 仅显示任务失败的日志 |
none | 隐藏所有任务日志 |
persistent
默认值: false
将任务标记为 persistent
以防止其他任务依赖于长时间运行的进程。持久性任务默认情况下是交互式的。
由于长时间运行的进程不会退出,因此依赖于它的任务永远不会运行。一旦你将任务标记为持久性,如果其他任务依赖于它,turbo
将抛出错误。
此选项对于开发服务器或其他“watch”任务最有用。
标记为 persistent
的任务也默认为 interactive
。
interactive
默认值: false
(对于标记为 persistent
的任务,默认为 true
)
将任务标记为 interactive
,使其在终端 UI 中接受来自 stdin
的输入。 必须与 persistent
一起使用。
此选项对于可以在运行时操作的脚本(如 Jest 或 Vitest)最有用。
interruptible
默认值: false
将 persistent
任务标记为 interruptible
,以允许 turbo watch
重新启动它。
turbo watch
监视你的包的更改并自动重新启动受影响的任务。但是,如果任务是持久性的,则默认情况下不会重新启动它。要启用重新启动持久性任务,请将 interruptible
设置为 true
。
边界
boundaries
标记允许你为boundaries
命令定义规则。
tags
tags
对象中的每个键都是可以使用turbo boundaries
检查的标记的名称。
在标记的配置对象中,你可以定义依赖项和被依赖项的规则。
dependencies
和 dependents
标记的依赖项和被依赖项的规则。
你可以添加允许列表和拒绝列表
允许列表和拒绝列表都可以省略。
也可以为标记的被依赖项添加规则,即导入此标记的包。
远程缓存
全局 remoteCache
选项具有各种字段,用于配置远程缓存的使用
enabled
默认值: true
启用远程缓存。
当 false
时,Turborepo 将禁用所有远程缓存操作,即使仓库具有有效的令牌也是如此。如果为 true,则启用远程缓存,但仍需要用户登录并将他们的仓库链接到远程缓存。
signature
默认值: false
为远程缓存的请求启用签名验证。 当 true
时,Turborepo 将使用环境变量 TURBO_REMOTE_CACHE_SIGNATURE_KEY
的值对每个上传的工件进行签名。 Turborepo 将拒绝任何签名无效或缺少签名的下载工件。
preflight
默认值: false
启用后,任何 HTTP 请求都将以 OPTIONS 请求开头,以确定端点是否支持该请求。
timeout
默认值: 30
设置远程缓存操作的超时时间。 值以秒为单位给出,并且仅接受整数值。 如果传递 0
,则任何缓存操作都没有超时时间。
uploadTimeout
默认值: 60
设置远程缓存上传的超时时间。 值以秒为单位给出,并且仅接受整数值。 如果传递 0
,则任何远程缓存上传都没有超时时间。
apiUrl
默认值: "https://vercel.com"
设置远程缓存 API 调用的端点。
loginUrl
默认值: "https://vercel.com"
设置在 turbo login
期间请求令牌的端点。
teamId
远程缓存团队的 ID。 该值将作为 teamId
在所有远程缓存 HTTP 调用的查询字符串中传递。 必须以 team_
开头,否则将不会使用。
teamSlug
远程缓存团队的 slug。 该值将作为 slug
在所有远程缓存 HTTP 调用的查询字符串中传递。