Turborepo 2.0
Turborepo 2.0 改进了 JavaScript 和 TypeScript 仓库的开发者体验,其功能包括
- 全新终端 UI:交互式任务和更清晰的日志
- 监听模式:仓库中任何工具的依赖感知型任务监听器
- 全新文档:核心 Monorepo 概念、更新的 API 参考和生态系统工具指南
- 许可和维护更新:升级到 MIT 许可证,并添加了长期支持策略
立即运行 npx @turbo/codemod migrate
进行更新,或使用 npx create-turbo@latest
开始使用。
全新终端 UI
在 Turborepo 1.13 中,我们发布了一个实验性界面,以了解改进后的终端 UI 如何提升开发速度。通过RFC 流程,我们得以与社区合作设计一个改进的本地体验,这得益于您的反馈。感谢所有参与者。
今天,我们将发布稳定的新 UI,以及它所支持的备受期待的功能。
改进了日志的清晰度
在 2.0 之前,当您处理库和应用程序时,turbo
会以流的形式输出日志。有时这可能会让人感到信息过载,因为混合的日志使得难以理解特定任务的进展情况。
在此 UI 版本中,您可以使用箭头键选择单个任务,一次检查一个任务的日志,从而更容易阅读您想要关注的日志。
须知:
早期版本的 turbo
中的流式日志视图仍然可以通过使用 --log-order
标志在本地开发中使用。请注意,使用此选项时,任务将不具有交互性,并且某些工具可能会意外清除终端。
交互式任务
许多工具允许与脚本进行交互以实现重要的功能。但是,在以前版本的 Turborepo 中,您的脚本被困在 turbo
内部,因此您无法与它们交互。
现在,您可以进入单个任务的 shell,并通过直接在界面中输入内容,将输入传递到脚本的 stdin
。这支持诸如使用 Jest 或 Vitest 运行特定测试套件、使用 Drizzle 或 Prisma 处理数据库迁移等工作流程。
要将任务标记为交互式,请在其定义中添加 "persistent": true
在 UI 中选择任务后,使用 Enter
键进入任务的 shell,使用 CTRL+Z
退出。
要了解有关持久性和交互式任务的更多信息,请访问文档。
监听模式
Turborepo 一次运行多个任务的能力为您提供了更紧密的反馈循环,帮助您更快地交付产品。为了在本地工作时充分利用 Turborepo 的并行化,您的工具需要具有可用的“监听器”功能,以便在您进行更改时重新运行代码。不幸的是,许多常用工具不具备此功能,并且大多数工具不具备 Monorepo 感知能力,这导致了仓库中依赖于其他脚本的脚本出现问题。
今天,我们发布监听模式,将此功能带给您的所有工具
使用 turbo watch
,Turborepo 将在您更改源代码时重新运行任务。任务将使用您的依赖关系图和 turbo.json
中的配置运行,就像 turbo run
一样。
全新文档
在此版本中,我们还发布了经过改进的文档,这些文档建立在早期版本的优势之上。我们听取了您的反馈,因此文档现在包括
- 更多 Monorepo 基础知识和操作指南
- 关于将您喜爱的工具与 Turborepo 集成的指南
- 更清晰的信息架构和改进的搜索
重大变更
访问升级指南,了解如何更新到 2.0。
配置
可以使用 npx @turbo/codemod migrate
更新 turbo.json
的重大变更。
- 忽略
package.json
中的turbo
字段 (PR) - Turborepo 的默认磁盘缓存位置从
node_modules/.cache
移至.turbo/cache
(PR) turbo.json
中的pipeline
键重命名为tasks
(PR)inputs
/outputs
中目录的文件 glob 包含目录的内容(例如,dist
和dist/
等同于dist/**
)(PR)outputMode
键重命名为outputLogs
,以提高清晰度并匹配--output-logs
标志 (PR)- 此更改将反映在
resolvedTaskConfig
中的运行摘要中
- 此更改将反映在
dependsOn
和globalDependencies
中环境变量语法错误(自 1.4 版本起已弃用)(PR)- 移除
globalDotEnv
和dotEnv
,改为在inputs
中包含.env
文件 (PR) - 移除
--ignore
,改为使用--filter
和下面的图形正确性更改 (PR)
正确性
- 环境变量的严格模式现在是默认模式,从宽松模式更改而来 (PR)
- 工作区根目录现在是所有包的隐式依赖项 (PR)
- 移除
--scope
标志(自 1.2 版本起已弃用)(PR) - 包必须在
package.json
中具有name
(PR) - 现在需要根
package.json
中的packageManager
字段 (PR) - 现在在哈希中使用根
package.json
中的engines
字段 (PR) --filter
不再为包名称推断命名空间 (PR)- 当没有匹配到包名称或目录时,
--filter
现在会报错 (PR) --only
限制任务依赖项,而不是仅限制包依赖项 (PR)
其他
社区
我们很高兴看到 Turborepo 的持续增长和采用
- 25.2k+ GitHub 星星
- 每周 230 万+ NPM 下载量
- 使用 Vercel Remote Cache 节省了 347 年的计算时间
Turborepo 是所有贡献者的共同努力成果,包括我们的核心团队:Anthony、Chris、Greg、Mehul、Mitch、Nicholas 和 Tom。
感谢您持续的支持、反馈和协作,使 Turborepo 成为您首选的构建工具。如果您尚未加入,请在 GitHub 和 Discord 上参与讨论。