运行任务
Turborepo 通过自动并行化和缓存任务来优化你仓库中的开发者工作流程。一旦任务在 turbo.json 中注册,你就拥有了一套强大的工具来运行仓库中的脚本:
通过 turbo 运行任务很强大,因为你可以在开发和 CI 流水线中使用一个模型来执行整个仓库的工作流程。
在 package.json 中使用 scripts
对于经常运行的任务,你可以直接将 turbo 命令写入根目录的 package.json。
Good to know:
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 任务。
Good to know:
使用过滤器 将覆盖自动包作用域。
自定义行为
在 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.json中使用"outputLogs": "full"的turbo build命令 - 但你此时只对查看错误感兴趣。使用全局turbo,你可以使用turbo lint --output-logs=errors-only只显示错误。
运行多个任务
turbo 能够运行多个任务,并在可能的情况下并行化。
这个命令将运行所有任务,根据你的任务定义自动检测在哪里可以尽早运行脚本。
任务的顺序
turbo test lint 将与 turbo lint test 完全相同地运行任务。
如果你想确保一个任务阻塞另一个任务的执行,请在你的 任务配置 中表达这种关系。
使用过滤器
虽然缓存通过确保永远不会重复相同的工作来保持速度,但你也可以过滤任务以仅运行任务图的子集。
在--filter API 参考中有许多高级过滤用例,但下面讨论最常见的用例。
按包过滤
按包过滤是一种简单的方法,只运行你当前正在处理的包的任务。
你也可以直接在 CLI 命令中过滤到包的特定任务,而不需要使用 --filter:
按目录过滤
你的仓库可能有一个将相关包分组在一起的目录结构。在这种情况下,你可以使用该目录的通配符来让 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 如何确保你永远不会重复相同的工作。