运行任务
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
如何确保你永远不会重复相同的工作。