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

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

边界 RFC

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

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

终端 UI 改进

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

持久化偏好设置

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

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

新的快捷键绑定

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

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

Watch Mode 缓存 实验性

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

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

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

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

循环依赖建议

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

在您的 monorepo 中采用 Turborepo 时,您可能会发现循环依赖,因为 Turborepo 创建的任务图比您之前的任务运行器更复杂、更快速。以前,Turborepo 会简单地列出代码仓库的包图中存在的循环中涉及的所有包。现在,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.rust-lang.net.cn/schema.json,但一些开发者更喜欢从 node_modules 获取该文件,以便与已安装的 turbo 版本保持同步。

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

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

node_modules 位置

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

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

ESLint Flat Config 支持

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

./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。