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 构建在包管理器工作区之上,依赖生态系统约定来确定仓库的任务缓存。然而,这要求仓库中的所有开发者都了解并遵守这些约定。

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

立即使用它

终端
turbo boundaries

边界功能的这个早期迭代包括发现两种类型的单体仓库错误

边界 RFC

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

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

终端用户界面改进

我们继续迭代终端用户界面,该界面最初发布于Turborepo 2.0

持久化偏好设置

在以前的 Turborepo 版本中,每次运行 turbo 时都需要将终端用户界面重置为您所需的状态。在 Turborepo 2.4 中,我们将持久化您所做的一些 UI 选择,包括

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

新键绑定

我们为终端用户界面添加了更多功能,使其更容易处理您的任务和日志。

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

监听模式缓存 实验性

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

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

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

要了解有关监听模式的更多信息,请访问文档

循环依赖推荐

循环依赖是您的包图中的循环,会在 Turborepo 的任务图中产生非确定性循环。然而,如果您的任务图中存在循环,Turborepo 将无法确定哪个任务先于哪个,因为它们都相互依赖。

在您的单体仓库中采用 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 文件在编辑器中提供自动补全和验证。我们有一个可通过网络访问的 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,因此模式文件的路径应指向仓库根目录的 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。