Turborepo 2.4
Turborepo 2.4 包含多项改进,以增强您的仓库
- 边界 实验性:Turborepo 边界功能的初步预览
- 终端 UI 改进:持久偏好设置和新功能
- Watch Mode 缓存 实验性:在 Watch Mode 中更快地开发
- 循环依赖建议:更轻松地在大型仓库中采用 Turborepo
node_modules
中的schema.json
:从您的仓库中进行版本化配置验证- ESLint Flat Config 支持:
eslint-config-turbo
和eslint-plugin-turbo
已更新以支持 ESLint v9
立即升级,运行 npx @turbo/codemod migrate
,或使用 npx create-turbo@latest
开始使用。
边界 实验性
Turborepo 构建于包管理器 Workspaces 之上,并依赖生态系统约定来确定仓库的任务缓存。然而,这要求仓库中的所有开发者都了解并遵守这些约定。
我们正在引入边界(Boundaries),这是一项实验性功能,用于捕获仓库中未遵循这些最佳实践的地方。这使缓存更安全,并确保您的仓库已准备好安全地使用未来的 Turborepo 功能。
立即尝试使用
Boundaries 的早期迭代版本包括查找两种类型的 monorepo 错误
- 导入包目录之外的文件
- 导入未在依赖项中指定的包
Boundaries RFC
我们期待听到您对 Boundaries RFC 的反馈,其中包括关于这些内置诊断以及自定义 Boundaries 的提案。
要了解更多信息,请访问文档。
终端 UI 改进
我们继续迭代终端 UI,该 UI 最初在 Turborepo 2.0 中发布。
持久偏好设置
在之前的 Turborepo 版本中,每次运行 turbo
时,您都需要将终端 UI 重置为您想要的状态。在 Turborepo 2.4 中,我们将持久化您所做的几个 UI 选择,包括
- 您之前选择的任务将在下次运行
turbo
时预先选择。让您的向上和向下箭头键休息一下。 - 任务列表可见性,如下所述
- 任务选择固定,如下所述
总之,持久化这些偏好设置可以在 turbo
调用之间创建更无缝的体验,将 UI 恢复到上次运行 turbo
的状态。
新的快捷键
我们在终端 UI 中添加了更多功能,使其更易于处理您的任务和日志。
- h 切换任务列表:您通常专注于您的某项任务,因此您不需要一直看到您的任务列表。按 h 键以显示和隐藏任务列表。此功能是持久偏好设置,如上所述。
- c 复制日志:一旦您用鼠标高亮显示了一组日志,请按 c 将日志复制到您的系统剪贴板。
- j 和 k 选择任务:现在,除了 ↑ 和 ↓ 之外,您还可以使用 j 和 k 在任务列表中循环。Vim 用户欢呼吧。
- p 固定选定的任务:选择任务会设置一个“pin”,这意味着即使您的任务状态发生变化,它仍将继续被选中。您可以通过按 p 来释放 pin(或固定您悬停的任务)。此功能是持久偏好设置,如上所述。
- u 和 d 滚动日志:现在您可以按 u 向上滚动日志,按 d 向下滚动日志。
- m 了解更多:按 m 将显示一个弹出窗口,列出所有可用的快捷键。
Watch Mode 缓存 实验性
Watch Mode 是一个 monorepo 感知的监视器,它根据您的 Task Graph 重新运行任务。这通过利用单个、全局的、依赖项感知的监视器,而不是许多较小的、功能较弱的监视器脚本,开辟了在 monorepos 中工作的新方法。
在此版本中,我们正在 Watch Mode 中添加缓存作为一项实验性功能。要激活它,请使用 --experimental-write-cache
标志
要了解有关 Watch Mode 的更多信息,请访问文档。
循环依赖建议
循环依赖是您的包图中的循环,它会在 Turborepo 的 Task Graph 中创建非确定性循环。但是,如果您的任务图中存在循环,则 Turborepo 无法确定哪个任务在先,因为它们都相互依赖。
在您的 monorepo 中采用 Turborepo 时,您可能会发现循环依赖,因为 Turborepo 创建的任务图比您之前的任务运行器更复杂、更快速。以前,Turborepo 会天真地列出仓库的 Package Graph 中存在的循环或周期中涉及的所有包。现在,Turborepo 将包括需要打破的依赖关系,以消除图中的循环。
比较下面终端打印输出的前后对比
node_modules
中的 schema.json
schema.json
文件为您的编辑器中的 JSON 文件提供自动完成和验证。我们有一个可从 Web 访问的 turbo.json
的 schema.json
版本,托管在 https://turbo.net.cn/schema.json
,但一些开发者更喜欢从 node_modules
获取文件,以与已安装的 turbo
版本保持同步。
从此版本开始,一旦您运行包管理器的安装命令,schema.json
即可在 node_modules
中使用


node_modules 位置
我们建议在仓库的根目录中安装 turbo
,因此 schema 的路径应指向仓库根目录中的 node_modules
。在 包配置 中,您可能需要使用类似 ../../node_modules/turbo/schema.json
的路径。
访问文档 以获取更多信息。
ESLint Flat Config 支持
继 ESLint v8 于 2024 年 10 月 5 日终止生命周期后,Turborepo 2.4 在 eslint-config-turbo
和 eslint-plugin-turbo
中引入了对 ESLint v9 的支持。
对于仍在使用 ESLint v8 的用户,配置和插件仍然向后兼容,以确保平稳过渡。
有关更多信息,请访问文档。
其他更改
致谢和社区
Turborepo 是所有贡献者共同努力的成果,包括我们的核心团队:Anthony、Chris、Dimitri、Nicholas 和 Tom。
感谢您一直以来的支持、反馈和协作,使 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。