Turborepo 2.5

2025年3月3日,星期四
Nicholas Yang
作者
Nicholas Yang
X (Twitter)
@nicholaslyang
Anthony Shew
作者
Anthony Shew
X (Twitter)
@anthonysheww
Chris Olszewski
作者
Chris Olszewski

Turborepo 2.5 包含多项改进,旨在增强您的代码仓库

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

Sidecar 任务

在某些情况下,您希望确保两个长时间运行的任务始终同时运行。例如,您可能有一个 Web 应用程序,它向您的 Monorepo 中的另一个应用程序发出请求。单独运行 Web 应用程序可能没有用,因为后端 API 应用程序将不可用以服务其请求。

您可能尝试使用 dependsOn 来创建这种关系 - 但很快发现不允许依赖长时间运行的任务。长时间运行的任务永远不会退出,因此依赖任务永远不会运行。这意味着您必须仔细编写 --filter 以确保这些资源可用——并确保代码仓库中的每个人都知道使用它。

相反,我们引入了 with 键,以便您可以保证依赖的长时间运行任务始终它在运行时依赖的长时间运行任务一起运行。

Turborepo logo
apps/web/turbo.json
{
  "tasks": {
    "dev": {
      "with": ["api#start"],
      "persistent": true,
      "cache": false
    }
  }
}

使用此软件包配置,每当 web 应用程序的 dev 任务启动时,apistart 任务也将使用 package#task 微语法运行。

访问文档以了解更多信息。

--continue 行为的改进控制

默认情况下,当 Turborepo 遇到失败的任务时,它会停止运行任务。您可以使用 --continue 标志更改此行为,指示 Turborepo 继续运行任务,即使一个或多个任务已失败。

虽然 --continue 标志很有用,但在某些情况下,运行依赖项已失败的任务只会导致更多失败。对于这些情况,在此版本中,我们为 --continue 标志添加了一个新值:--continue=dependencies-successful

终端
turbo run test --continue=dependencies-successful

当使用此值时,任务的所有依赖项必须成功,依赖任务才能运行。

在文档中了解更多信息.

Turborepo 核心团队要感谢 @jenseng 贡献此功能。

向您的 Turborepo 配置文件添加注释

您现在可以使用 JSONC (turbo.jsonc) 作为您的配置文件,允许您向您的配置添加有用的注释。

./turbo.jsonc
{
  "tasks": {
    "test": {
      // Our tests need their dependencies to be built first
      "dependsOn": ["^build"]
    }
  }
}

Bun 代码仓库的精简 Monorepo

turbo prune 为目标软件包创建一个部分 Monorepo,对于从 Monorepo 创建轻量级 Docker 镜像尤其有用。此命令在以前版本的 Turborepo 中已可用于 pnpm、npm 和 Yarn 代码仓库。

在此版本中,turbo prune 现在可用于 Bun v1.2+,它引入了一个基于文本的 lockfile,我们现在可以读取和分析它。

终端
turbo prune web

要了解更多关于 turbo prune 的信息,请访问文档

Turborepo 核心团队要感谢 @camero2734 贡献此功能。

使用 $TURBO_ROOT$ 微语法引用您的工作区根目录

在某些情况下,您被迫突破 Monorepo 中的软件包边界。这可能是由于许多约束造成的,例如不符合现代软件包管理器工作区或使您脱离理想条件的增量迁移工作流程的工具。

过去,您需要在 turbo.json 中编写遍历到工作区根目录的路径,因为 glob 是锚定到软件包根目录的

Turborepo logo
./turbo.json
{
  "tasks": {
    "build": {
      "inputs": ["../../important-file.txt"]
    }
  }
}

虽然这种模式确实有效,但在某些情况下可能会导致不一致

相反,您现在可以使用 $TURBO_ROOT$ 微语法

Turborepo logo
./turbo.json
{
  "tasks": {
    "build": {
      "inputs": ["$TURBO_ROOT$/important-file.txt"]
    }
  }
}

现在,此文件 glob 保证始终从您的工作区根目录开始。

访问文档以了解更多信息。

用于自托管的 OpenAPI 规范查看器

Turborepo 很荣幸成为开源项目,并为其远程缓存协议提供了公共规范。虽然 Vercel 远程缓存是一个免费使用的托管选项,但 OpenAPI 规范允许社区创建自己的远程缓存实现。

我们已将 远程缓存规范以 JSON 格式发布到 Web 有一段时间了,最近在 https://turbo.net.cn/docs/openapi 添加了该规范的人类友好版本。

访问远程缓存文档以了解更多信息。

其他变更

致谢和社区

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

感谢您持续的支持、反馈和协作,使 Turborepo 成为您的首选构建工具。要了解如何参与,请访问社区页面

我们还要感谢为 Turborepo 的此版本做出贡献的所有人:@beaussan、@bohongu、@camero2734、@cprussin、@dinglindong、@jenseng、@jimmycathy、@kevincatty、@mm-webx、@ognevny、@pi0、@pudongair、@rootdiae、@shinjith-dev、@sicarius97、@ssshashank、@Tigatok、@todaymoon、@Tyoneb、@victorlagerfors、@vinayaksodar、@wmjae、@x-N0 和 @xiaobei0715。