Turborepo 2.2

2024年10月18日,星期五
Tom Knickman
姓名
Tom Knickman
X
@tknickman
Anthony Shew
姓名
Anthony Shew
X
@anthonysheww
Chris Olszewski
姓名
Chris Olszewski
Nicholas Yang
姓名
Nicholas Yang
X
@nicholaslyang
Dimitri Mitropoulos
姓名
Dimitri Mitropoulos

Turborepo 2.2 带来了新的仓库查询命令,以及其他改进,包括

立即运行 npx @turbo/codemod migrate 进行更新,或使用 npx create-turbo@latest 开始使用。

查询你的仓库 实验性

在 Turborepo 2.2 中,我们引入了 turbo query——一个新命令,允许针对 Turborepo 的仓库数据运行 GraphQL 查询。Turborepo 计算关于你的仓库的大量数据,以便以最大效率执行你的任务。这包括你的软件包依赖关系图、已更改的软件包、任务依赖关系、来自你的任务的日志输出等等。这些数据对于脚本编写、重构、确定在 CI 中运行什么以及发现关于你的代码库的其他见解非常有用。

要开始使用,运行 turbo query 以打开 GraphiQL——一个本地 IDE,用于编写 GraphQL 查询,支持交互式模式探索、文档和发送查询。

你也可以直接将查询作为字符串或文件路径传递

终端
turbo query "query { package(name: \"web\") { name } }"
turbo query query.gql

示例

获取所有具有 test 任务的受影响软件包的名称和路径。

affected-packages.gql
{
  affectedPackages(
    base: "main"
    head: "HEAD"
    filter: { has: { field: TASK_NAME, value: "test" } }
  ) {
    items {
      name
      path
    }
  }
}

获取特定软件包及其直接依赖项。

direct-dependencies.gql
query {
  package(name: "cli") {
    directDependencies {
      name
    }
  }
}

查找所有具有超过 10 个直接依赖项的软件包。

filter.gql
query {
  packages(
    filter: { greaterThan: { field: DIRECT_DEPENDENT_COUNT, value: 10 } }
  ) {
    name
  }
}

Turborepo 过去曾为结构化数据添加了 API,例如运行摘要dry runls。但是,这些 API 有一些限制。首先,它们围绕单个运行,而不是一般的仓库信息。其次,当我们添加更多字段时,输出很快变得非常大。我们需要一种以运行无关的方式查询仓库数据的方法,并使返回的数据更可定制。

我们要感谢 @maschwenk@rafaeltab@weyert 对此功能的早期反馈。

要了解更多信息,请访问文档,并在 turbo query RFC 上为此新的实验性命令留下反馈。

改进的缓存安全性

缓存任务是 Turborepo 最强大的功能之一,通过仅重新运行已更改的内容来加速构建和其他任务。在 Turborepo 2.2 中,我们发布了一些改进,以帮助配置缓存输入和输出,并在事情看起来不太正确时警告你。

平台环境变量

当部署你的应用程序时,你可能已经在你的生产环境中配置了环境变量。现在,对于受支持的平台,Turborepo 将自动检查这些环境变量与你的 turbo.json 配置,以确保你已正确考虑它们,并会警告你任何缺失的环境变量。

任何平台都可以通过在构建环境中实现 TURBO_PLATFORM_ENV 环境变量来支持此功能。

Vercel 今天支持,随着更多平台可用,我们将更新文档。

了解更多关于平台环境变量的信息。

空缓存配置的警告

运行任务时,如果任务配置为缓存空目录,Turborepo 现在会警告你。这可能是一个常见的错误,并可能导致意外的构建失败。此功能在 2.2 中默认启用。

了解更多关于配置输出的信息。

eslint-config-turbo 的改进

对于常见框架,Turborepo 会自动将前缀通配符添加到你的 env 键。如果你正在使用受支持的框架之一,则无需指定以框架前缀开头的环境变量。

现在在 Turborepo 2.2 中,eslint-config-turbo 也支持此功能,确保来自插件的警告是准确且可操作的。

了解更多关于 eslint-config-turbo 的信息。

使用 --affected 进行零配置比较

在 Turborepo 2.1 中,我们发布了 --affected 标志,该标志可以与 turbo runturbo ls 一起使用,以自动定位更改的软件包。在 2.2 中,我们通过在 GitHub 工作流程中运行 --affected 时引入自动比较,使其更进一步——使常见用例更加智能。

了解更多关于 --affected 的信息。

社区

自发布 Turborepo 2.1 以来,我们看到了令人难以置信的采用和社区增长

Turborepo 是所有贡献者(包括我们的核心团队)共同努力的结果。

查看完整更新日志

感谢您持续的支持、反馈和协作,使 Turborepo 成为您首选的构建工具。