构建您的仓库
了解您的仓库
了解 Turborepo 提供的用于理解仓库结构的工具,帮助您使用和优化代码库。
Turborepo 包含用于了解仓库结构的工具,可以帮助您使用和优化代码库。
turbo ls
要列出您的包,您可以运行 turbo ls。这将显示仓库中的包及其位置。
> turbo ls
@repo/eslint-config packages/eslint-config
@repo/typescript-config packages/typescript-config
@repo/ui packages/ui
docs apps/docs
web apps/web
您可以对 ls 应用过滤器,就像对 run 一样:
> 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 开始,Turborepo 通过 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"
}
},
]
}
}
}