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 功能。
立即使用以下命令尝试:
边界的早期迭代版本包括查找两种类型的 monorepo 错误:
- 导入包目录之外的文件
- 导入未在依赖项中指定的包
边界 RFC
我们期待听到您对边界 RFC的反馈,其中包括关于这些内置诊断以及自定义边界的提案。
要了解更多信息,请访问文档。
终端 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 固定选定的任务:选择一个任务会设置一个“固定”,这意味着它将继续被选中,即使您的任务状态发生变化。您可以通过按 p 来释放固定(或固定您正在悬停的任务)。此功能是一个持久化偏好设置,如上所述。
- u 和 d 滚动日志:您现在可以按 u 向上滚动日志,按 d 向下滚动日志。
- m 了解更多:按 m 将显示一个弹出窗口,列出所有可用的快捷键绑定。
Watch Mode 缓存 实验性
Watch Mode 是一个 monorepo 感知的监视器,它根据您的任务图重新运行任务。这通过利用单个、全局的、依赖感知的监视器,而不是许多较小的、功能较弱的监视器脚本,开辟了在 monorepo 中工作的全新方式。
在此版本中,我们添加了缓存作为 Watch Mode 中的一项实验性功能。要激活它,请使用 --experimental-write-cache
标志
要了解有关 Watch Mode 的更多信息,请访问文档。
循环依赖建议
循环依赖是包图中的循环,会在 Turborepo 的任务图中创建不确定的循环。但是,如果您的任务图中存在循环,Turborepo 将无法确定哪个任务先执行,因为它们都相互依赖。
在您的 monorepo 中采用 Turborepo 时,您可能会发现循环依赖,因为 Turborepo 创建的任务图比您之前的任务运行器更复杂、更快速。以前,Turborepo 会简单地列出代码仓库的包图中存在的循环中涉及的所有包。现在,Turborepo 将包含需要打破的依赖关系,以消除图中的循环。
比较以下终端输出的前后对比
node_modules
中的 schema.json
schema.json
文件为 JSON 文件在您的编辑器中提供自动完成和验证功能。我们有一个可从 Web 访问的 turbo.json
的 schema.json
版本,托管在 https://turbo.rust-lang.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 支持
Turborepo 2.4 在 eslint-config-turbo
和 eslint-plugin-turbo
中引入了对 ESLint v9 的支持,紧随 ESLint v8 于 2024 年 10 月 5 日终止生命周期之后。
配置和插件仍然向后兼容那些仍在使用 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。