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 远程缓存 节省了 347 年的计算时间
Turborepo 是其所有贡献者(包括我们的核心团队:Anthony、Chris、Greg、Mehul、Mitch、Nicholas 和 Tom)共同努力的成果。
感谢您一直以来的支持、反馈和协作,使 Turborepo 成为您首选的构建工具。如果您尚未加入,请在 GitHub 和 Discord 上加入对话。