Turborepo

了解你的仓库

Turborepo 包含用于了解你的仓库结构的工具,可以帮助你使用和优化你的代码库。

turbo ls

要列出你的包,你可以运行 turbo ls。这将显示你的仓库中的包以及它们的位置。

终端
> turbo ls
turbo 2.1.3
 
 WARNING  ls command is experimental and may change in the future
5 packages (pnpm9)
 
  @repo/eslint-config packages/eslint-config
  @repo/typescript-config packages/typescript-config
  @repo/ui packages/ui
  docs apps/docs
  web apps/web

你可以像 run 一样应用过滤器ls

终端
> turbo ls --filter ...ui
3 packages (pnpm9)
 
  @repo/ui packages/ui
  docs apps/docs
  web apps/web

turbo run

要确定你的 monorepo 中可以运行哪些任务,只需在不指定任何任务的情况下调用 turbo run。你将获得任务列表以及定义这些任务的包。

终端
> turbo run
No tasks provided, here are some potential ones
 
  lint
    @repo/ui, docs, web
  build
    docs, web
  dev
    docs, web
  start
    docs, web
  generate:component
    @repo/ui

turbo query

如果你想深入了解你的仓库结构,从 2.2.0 版本开始,Turbo 通过 turbo query 提供了一个 GraphQL 接口来访问你的仓库。你可以执行查询,例如查找所有具有 test 任务的包。

终端
> turbo query "query { packages(filter: { has: { field: TASK_NAME, value: \"build\"}}) { items { name } } }"
{
  "data": {
    "packages": {
      "items": [
        {
          "name": "//"
        },
        {
          "name": "docs"
        },
        {
          "name": "web"
        }
      ]
    }
  }
}

这有助于诊断你的包或任务依赖关系图中潜在的问题。例如,假设你的构建中出现了很多缓存未命中。这可能是因为有一个包一直在更改,并且在你的整个代码库中都被导入。

为此,我们可以运行一个查询来查找在你的 monorepo 中直接导入次数超过 10 次的包

终端
> turbo query "query { packages(filter: { greaterThan: { field: DIRECT_DEPENDENT_COUNT, value: 10 } }) { items { name } } }"
{
  "data": {
    "packages": {
      "items": [
        {
          "name": "utils"
        }
      ]
    }
  }
}

现在我们找到了这个包,我们可以尝试将其拆分为更小的包,以便一个小更改不会使整个依赖关系图失效。

或者假设你正在使用我们新的 --affected 标志,但你仍然运行了比你期望的更多的任务。使用 turbo query,你可以找到所有包以及它们失效的原因。

终端
> turbo query "query { affectedPackages(base: \"HEAD^\", head: \"HEAD\") { items { reason {  __typename } } } }"
{
  "data": {
    "affectedPackages": {
      "items": [
        {
          "name": "utils",
          "reason": {
            "__typename": "FileChanged"
          }
        },
        {
          "name": "web",
          "reason": {
            "__typename": "DependencyChanged"
          }
        },
        {
          "name": "docs",
          "reason": {
            "__typename": "DependencyChanged"
          }
        },
        {
          "name": "cli",
          "reason": {
            "__typename": "DependencyChanged"
          }
        },
      ]
    }
  }
}

小时

总计算时间节省
开始使用
远程缓存 →

本页内容