运行任务
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 时,你可以使用以下工作流更快地运行
- 你最常用命令的变体:
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 如何让你永不重复相同的工作。