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 的持续增长和采用
- 2.52 万+ GitHub Star
- 每周 230 万+ NPM 下载量
- 使用Vercel 远程缓存节省了 347 年的计算时间
Turborepo 是所有贡献者共同努力的成果,包括我们的核心团队:Anthony、Chris、Greg、Mehul、Mitch、Nicholas 和 Tom。
感谢您持续的支持、反馈和协作,让 Turborepo 成为您首选的构建工具。如果您尚未加入,请在GitHub和Discord上参与讨论。