运行任务
Turborepo 通过自动并行化和缓存任务来优化存储库中的开发人员工作流程。一旦任务在 turbo.json
中注册,您就拥有了一个强大的新工具集,用于运行存储库中的脚本
通过 turbo
运行任务非常强大,因为您在开发和 CI 管道中获得了一种在整个存储库中执行工作流程的模型。
在 package.json
中使用 scripts
对于您经常运行的任务,您可以将 turbo
命令直接写入您的根目录 package.json
。
须知
turbo
是 turbo run
的别名 - 但我们建议在 package.json
和 CI 工作流程中使用 turbo run
,以避免与将来可能添加的 turbo
子命令发生潜在冲突。
然后可以使用您的包管理器运行这些脚本。
您只想在根目录 package.json
中编写 turbo
命令。将 turbo
命令写入包的 package.json
中可能会导致递归调用 turbo
。
使用全局 turbo
全局安装 turbo
可让您直接从终端运行命令。这改善了您的本地开发体验,因为它使您可以更轻松地在需要时运行所需的内容。
此外,全局 turbo
在您的 CI 管道中也很有用,使您可以最大程度地控制在管道的每个点运行哪些任务。
自动包作用域
当您位于包的目录中时,turbo
会自动将命令的作用域限定为该包的包图。这意味着您可以快速编写命令,而无需为该包编写过滤器。
在上面的示例中,turbo build
命令将使用 turbo.json
中注册的 build
任务为 docs
包运行 build
任务。
须知
使用过滤器将覆盖自动包作用域。
自定义行为
在run
子命令的文档中,您会找到许多有用的标志,可以根据您的需要定制 turbo run
的行为。运行全局 turbo
时,您可以使用以下工作流程更快地运行:
- 最常用命令的变体:当
build
脚本是turbo build
时,它在package.json
中最有实用性 - 但您可能目前只对特定包感兴趣。您可以使用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
如何使您永远不必重复做相同的工作。
此内容是否有帮助?