运行任务
Turborepo 通过自动并行化和缓存任务来优化你仓库中的开发者工作流程。一旦任务在 turbo.json
中注册,你就拥有了一个强大的新工具集,用于运行你仓库中的脚本
通过 turbo
运行任务非常强大,因为你获得了一个模型,用于在整个仓库的开发和 CI 管道中执行工作流程。
在 package.json
中使用 scripts
对于你经常运行的任务,你可以将 turbo
命令直接写入你的根目录 package.json
中。
须知:
turbo
是 turbo run
的别名 - 但我们建议在 package.json
和 CI 工作流程中使用 turbo run
,以避免与未来可能添加的 turbo
子命令发生潜在冲突。
这些脚本随后可以使用你的包管理器运行。
你只想在你的根目录 package.json
中编写 turbo
命令。在包的 package.json
中编写 turbo
命令可能会导致递归调用 turbo
。
使用全局 turbo
全局安装 turbo
使你可以直接从终端运行命令。这改善了你的本地开发体验,因为它使你可以更轻松地在你需要时运行你需要的命令。
此外,全局 turbo
在你的 CI 管道中也很有用,让你最大限度地控制在管道的每个点运行哪些任务。
自动包作用域
当你在一个包的目录中时,turbo
将自动将命令的作用域限定为该包的 包图。这意味着你可以快速编写命令,而无需为该包 编写过滤器。
在上面的示例中,turbo build
命令将使用在 turbo.json
中注册的 build
任务,为 docs
包运行 build
任务。
须知:
使用过滤器 将覆盖自动包作用域。
自定义行为
在 run
子命令的文档 中,你将找到许多有用的标志,可以根据你的需要定制 turbo run
的行为。当运行全局 turbo
时,你可以使用如下工作流程更快地运行:
- 你最常用命令的变体:
package.json
中的build
脚本在它是turbo build
时最有用 - 但你可能目前只对特定包感兴趣。你可以使用turbo build --filter=@repo/ui
快速筛选出你感兴趣的特定包。 - 一次性命令:像
turbo build --dry
这样的命令不常用,因此你可能不会在你的package.json
中为其创建脚本。相反,你可以在需要时随时在终端中直接运行它。 - 覆盖
turbo.json
配置:某些 CLI 标志在turbo.json
中具有等效项,你可以覆盖它们。例如,你可能已配置turbo build
命令以在turbo.json
中使用"outputLogs": "full"
- 但你目前只对查看错误感兴趣。使用全局turbo
,你可以使用turbo lint --output-logs=errors-only
仅显示错误。
运行多个任务
turbo
能够运行多个任务,并在可能的情况下进行并行化。
此命令将运行所有任务,根据你的任务定义自动检测可以在何处尽早运行脚本。
任务排序
turbo test lint
将以与 turbo lint test
完全相同的方式运行任务。
如果你想确保一个任务阻止另一个任务的执行,请在你的 任务配置 中表达这种关系。
使用过滤器
虽然 缓存 确保你保持快速,永不重复相同的工作,但你也可以筛选任务,仅运行 任务图 的子集。
在 --filter
API 参考 中,有很多高级用例用于过滤,但下面讨论最常见的用例。
按包筛选
按包筛选是一种简单的方法,仅为你当前正在处理的包运行任务。
你还可以直接在你的 CLI 命令中为包筛选特定任务,而无需使用 --filter
按目录筛选
你的仓库可能具有目录结构,其中相关的包被分组在一起。在这种情况下,你可以捕获该目录的 glob 模式,以将 turbo
聚焦于这些包。
筛选以包含依赖项
当你在处理特定包时,你可能想要为该包及其依赖项运行任务。当你更改包并希望确保更改不会破坏其任何依赖项时,...
微语法很有用。
筛选以包含依赖
要将范围限制为包及其依赖项,请将 ...
附加到包名称。这将为指定的包及其依赖的所有包运行任务。
按源代码控制更改筛选
使用过滤器根据源代码控制中的更改运行任务是仅为受你的更改影响的包运行任务的好方法。源代码控制过滤器必须用 []
括起来。
- 与上一个提交比较:
turbo build --filter=[HEAD^1]
- 与主分支比较:
turbo build --filter=[main...my-feature]
- 使用 SHA 比较特定提交:
turbo build --filter=[a1b2c3d...e4f5g6h]
- 使用分支名称比较特定提交:
turbo build --filter=[your-feature...my-feature]
通常,你可以依靠缓存来保持你的仓库快速。当你在使用 远程缓存 时,你可以指望为未更改的包命中缓存。
组合过滤器
为了获得更高的特异性,你可以组合过滤器以进一步细化进入你的 任务图 的入口点。
多个过滤器组合为并集,这意味着 任务图 将包括与任何过滤器匹配的任务。有关过滤器高级用法的更多信息,请参阅 --filter
API 参考。
下一步
当你开始在你的仓库中运行任务时,你可能会开始注意到你的任务变得更快。接下来,你将探索 缓存 以及 turbo
如何使你永不重复相同的工作。