Turborepo 2.5

2025年4月3日,星期四
Nicholas Yang
姓名
Nicholas Yang
X
@nicholaslyang
Anthony Shew
姓名
Anthony Shew
X
@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 形式发布到网络 已有一段时间,最近又在 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。