Turborepo 2.4

2025年1月31日,星期五
Nicholas Yang
姓名
Nicholas Yang
X
@nicholaslyang
Anthony Shew
姓名
Anthony Shew
X
@anthonysheww
Chris Olszewski
姓名
Chris Olszewski

Turborepo 2.4 包含多项改进,以增强您的仓库

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

边界 实验性

Turborepo 构建于包管理器 Workspaces 之上,并依赖生态系统约定来确定仓库的任务缓存。然而,这要求仓库中的所有开发者都了解并遵守这些约定。

我们正在引入边界(Boundaries),这是一项实验性功能,用于捕获仓库中未遵循这些最佳实践的地方。这使缓存更安全,并确保您的仓库已准备好安全地使用未来的 Turborepo 功能。

立即尝试使用

终端
turbo boundaries

Boundaries 的早期迭代版本包括查找两种类型的 monorepo 错误

Boundaries RFC

我们期待听到您对 Boundaries RFC 的反馈,其中包括关于这些内置诊断以及自定义 Boundaries 的提案。

要了解更多信息,请访问文档

终端 UI 改进

我们继续迭代终端 UI,该 UI 最初在 Turborepo 2.0 中发布。

持久偏好设置

在之前的 Turborepo 版本中,每次运行 turbo 时,您都需要将终端 UI 重置为您想要的状态。在 Turborepo 2.4 中,我们将持久化您所做的几个 UI 选择,包括

总之,持久化这些偏好设置可以在 turbo 调用之间创建更无缝的体验,将 UI 恢复到上次运行 turbo 的状态。

新的快捷键

我们在终端 UI 中添加了更多功能,使其更易于处理您的任务和日志。

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

Watch Mode 缓存 实验性

Watch Mode 是一个 monorepo 感知的监视器,它根据您的 Task Graph 重新运行任务。这通过利用单个、全局的、依赖项感知的监视器,而不是许多较小的、功能较弱的监视器脚本,开辟了在 monorepos 中工作的新方法。

在此版本中,我们正在 Watch Mode 中添加缓存作为一项实验性功能。要激活它,请使用 --experimental-write-cache 标志

终端
turbo watch dev --experimental-write-cache

要了解有关 Watch Mode 的更多信息,请访问文档

循环依赖建议

循环依赖是您的包图中的循环,它会在 Turborepo 的 Task Graph 中创建非确定性循环。但是,如果您的任务图中存在循环,则 Turborepo 无法确定哪个任务在先,因为它们都相互依赖。

在您的 monorepo 中采用 Turborepo 时,您可能会发现循环依赖,因为 Turborepo 创建的任务图比您之前的任务运行器更复杂、更快速。以前,Turborepo 会天真地列出仓库的 Package Graph 中存在的循环或周期中涉及的所有包。现在,Turborepo 将包括需要打破的依赖关系,以消除图中的循环。

比较下面终端打印输出的前后对比

终端
  × Invalid package dependency graph:
  ╰─▶ Cyclic dependency detected:
  │     @repo/logger, blog, storefront, @repo/ui
  │     The cycle can be broken by removing any of these sets of dependencies:
  │     { @repo/ui -> @repo/logger, @repo/ui -> storefront }
  │     { @repo/logger -> @repo/ui, @repo/ui -> storefront }

  ╰─▶   api, admin
        The cycle can be broken by removing any of these sets of dependencies:
        { admin -> api }
        { api -> admin }

node_modules 中的 schema.json

schema.json 文件为您的编辑器中的 JSON 文件提供自动完成和验证。我们有一个可从 Web 访问的 turbo.jsonschema.json 版本,托管在 https://turbo.net.cn/schema.json,但一些开发者更喜欢从 node_modules 获取文件,以与已安装的 turbo 版本保持同步。

从此版本开始,一旦您运行包管理器的安装命令,schema.json 即可在 node_modules 中使用

Turborepo logo
turbo.json
{
  "$schema": "./node_modules/turbo/schema.json"
}

node_modules 位置

我们建议在仓库的根目录中安装 turbo,因此 schema 的路径应指向仓库根目录中的 node_modules。在 包配置 中,您可能需要使用类似 ../../node_modules/turbo/schema.json 的路径。

访问文档 以获取更多信息。

ESLint Flat Config 支持

继 ESLint v8 于 2024 年 10 月 5 日终止生命周期后,Turborepo 2.4 在 eslint-config-turboeslint-plugin-turbo 中引入了对 ESLint v9 的支持。

./packages/eslint-config/index.js
import turboConfig from 'eslint-config-turbo/flat';
 
export default [
  ...turboConfig,
  // Other configuration
];

对于仍在使用 ESLint v8 的用户,配置和插件仍然向后兼容,以确保平稳过渡。

有关更多信息,请访问文档

其他更改

致谢和社区

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

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

我们还要感谢所有为 Turborepo 的此版本做出贡献的人:@aaronccasanova、@AlvaroParker、@ankur-arch、@arosequist、@atimmer、@bgw、@bitttttten、@chaficnajjar、@codexshell、@eps1lon、@gianelli99、@glitched-w0rld、@JasonnnW3000、@jbrocksfellas、@jeremy-code、@jonathandsouza、@Juneezee、@kayumuzzaman、@krlvi、@maciej-ka、@ognevny、@olets、@pkerschbaum、@romanofski、@shivam-pawar、@takaebato、@tevem1207、@thebrubaker、@Tofandel、@trivikr、@yamz8 和 @zsh77。