运行任务
Turborepo 通过自动并行化和缓存任务来优化您仓库中的开发者工作流程。一旦任务在 turbo.json 中注册,您就拥有了在仓库中运行脚本的强大新工具集:
通过 turbo 运行任务非常强大,因为您可以在开发和 CI 流水线中使用一个统一的模型来执行整个仓库的工作流程。
在 package.json 中使用 scripts
对于经常运行的任务,您可以将 turbo 命令直接写入根目录的 package.json 中。
{
"scripts": {
"dev": "turbo run dev",
"build": "turbo run build",
"test": "turbo run test",
"lint": "turbo run lint"
}
}
turbo 是 turbo run 的别名 - 但我们建议在 package.json 和 CI 工作流程中使用 turbo run,以避免与将来可能添加的 turbo 子命令发生潜在冲突。然后可以使用您的包管理器运行这些脚本。
pnpm dev
yarn dev
npm run dev
bun run dev
package.json 中编写 turbo 命令。在包的 package.json 中编写 turbo 命令可能会导致递归调用 turbo。使用全局 turbo
全局安装 turbo 让您可以直接从终端运行命令。这改善了您的本地开发体验,因为它使您更容易在需要时运行确切需要的内容。
此外,全局 turbo 在您的 CI 流水线中很有用,让您可以最大程度地控制在流水线的每个点运行哪些确切的任务。
自动包作用域
当您在包的目录中时,turbo 会自动将命令作用域限定为该包的包图。这意味着您可以快速编写命令,而无需为包编写过滤器。
cd apps/docs
turbo build
在上面的示例中,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中有等效的配置,您可以覆盖它们。例如,您可能有一个配置为使用"outputLogs": "full"在turbo.json中的turbo build命令 - 但您目前只想看到错误。使用全局turbo,您可以使用turbo lint --output-logs=errors-only来只显示错误。
运行多个任务
turbo 能够运行多个任务,尽可能并行化。
turbo run build test lint check-types
此命令将运行所有任务,根据您的任务定义自动检测可以尽早运行脚本的位置。
使用过滤器
虽然缓存通过永不重复相同工作来确保您保持快速,但您也可以过滤任务以仅运行任务图的子集。
在 --filter API 参考中有许多过滤的高级用例,但下面讨论了最常见的用例。
按包过滤
按包过滤是一种简单的方法,只为您当前正在处理的包运行任务。
turbo build --filter=@acme/web
--filter:# 为 `web` 包运行 `build` 任务
turbo run web#build
# 为 `web` 包运行 `build` 任务,为 `docs` 包运行 `lint` 任务
turbo run web#build docs#lint
按目录过滤
您的仓库可能有一个目录结构,其中相关的包被分组在一起。在这种情况下,您可以捕获该目录的 glob 模式来让 turbo 专注于这些包。
turbo lint --filter="./packages/utilities/*"
过滤以包含依赖者
当您正在处理特定包时,您可能希望为该包及其依赖者运行任务。... 微语法在您对包进行更改并希望确保更改不会破坏其任何依赖者时很有用。
turbo build --filter=...ui
过滤以包含依赖项
要将范围限制为包及其依赖项,请在包名后附加 ...。这会为指定的包及其依赖的所有包运行任务。
turbo dev --filter=web...
按源代码控制变更过滤
使用过滤器根据源代码控制中的变更运行任务是一种很好的方法,只为受您的变更影响的包运行任务。源代码控制过滤器必须用 [] 包装。
- 与上一次提交比较:
turbo build --filter=[HEAD^1] - 与主分支比较:
turbo build --filter=[main...my-feature] - 使用 SHA 比较特定提交:
turbo build --filter=[a1b2c3d...e4f5g6h] - 使用分支名比较特定提交:
turbo build --filter=[your-feature...my-feature]
组合过滤器
为了更加精确,您可以组合过滤器来进一步细化进入任务图的入口点。
turbo build --filter=...ui --filter={./packages/*} --filter=[HEAD^1]
多个过滤器作为并集组合,这意味着任务图将包含匹配任何过滤器的任务。有关过滤器高级用法的更多信息,请参阅 --filter API 参考。
下一步
当您开始在仓库中运行任务时,您可能会开始注意到您的任务变得更快。接下来,您将探索缓存以及 turbo 如何确保您永远不会重复相同的工作。