Turborepo 1.2
自1月底发布Turborepo v1.1以来,我们看到了令人难以置信的采用率和社区增长
- 6.5k+ GitHub 星标
- 每周 14万+ npm下载量(自我们v1.1的上一篇博客文章发布以来翻了一番)
- 95+ 开源贡献者
- 900+ Turborepo社区Discord成员
- 通过Vercel上的远程缓存节省了 1.6年 的时间,每周节省超过2.5个月
我们通过Turborepo v1.2进一步改进了人体工程学、可观察性和安全性,包括
- 新的任务过滤API:
--filter为turbo run添加了更强大的任务过滤功能 - 人机可读和JSON模拟运行:
--dry-run标志可以打印出关于turbo run的信息,而无需执行任何任务,支持人类可读和JSON解析友好的格式 - 改进的内部调度器和图:我们重构了
turbo的内部调度器和图,使其更符合人体工程学且更可预测 - 增强的远程缓存安全性:使用您自己的密钥对远程缓存工件进行加密签名
立即运行 npm install turbo@latest 进行更新。首次运行 turbo run 后,您将看到有关如何使用 @turbo/codemod 运行 v1.2 自动迁移的说明。
新的任务过滤API
我们很高兴发布我们最受请求的功能之一:通过 --filter 标志进行表达性任务过滤。--filter 标志是当前 --scope、--include-dependencies、--since 和 --no-deps 标志组合的更强大继承者。
使用 --filter,您可以告诉 turbo 将命令执行限制为您的单体仓库中基于名称、文件夹,甚至自 Git 提交引用以来是否已更改的匹配包子集。
请看一些使用新 --filter 命令可以实现的功能示例
--filter=<package_name>- 按精确包名或全局模式匹配--filter=...<package_name>- 按包名/全局模式匹配,并包含所有匹配的依赖包--filter=...^<package_name>- 按包名/全局模式匹配,并包含所有匹配的依赖包,但排除匹配本身--filter=<package_name>...- 按包名/全局模式匹配,并包含所有匹配包的依赖项--filter=<package_name>^...- 按包名/全局模式匹配,并包含所有匹配包的依赖项,但排除匹配本身--filter={./path/to/package}- 按路径或文件系统全局模式匹配--filter=[origin/main]- 按自 Git 提交引用以来更改的包匹配
您可以将多个过滤器一起使用以获得更精细的过滤,以及组合上述模式的每个部分 {}、[]、^ 和 ... 以表达更复杂的行为。
例如,如果您的应用程序位于 ./apps/web 目录中,使用本地包作为依赖项,并且有一个 Turborepo 管道,其中 test 拓扑上依赖于 ^build,运行
将告诉 turbo 确保依赖项已构建,并在 ./apps/web 中应用程序的所有本地依赖项中运行 test 脚本,不包括应用程序本身,如果应用程序自 HEAD^1 以来已更改。
有关更多详细信息和示例,请参阅新的过滤文档。
使用 --dry-run 进行调试和自动化
您现在可以通过在任何 turbo run 命令后附加 --dry-run 或 --dry-run=json 来查看 turbo run 的影响,而无需实际执行任何命令。这将生成人类可读或JSON输出。
模拟运行在两种情况下非常有用
- 调试和测试运行选项
- 使用
turbo过滤和任务图来构建自动化

我们希望这将提高对 turbo 正在做什么的可见性,加快调试速度,并使其更容易在动态CI/CD系统中利用 turbo。
改进的内部调度器和图
使用 turbo run 时,每个 package.json 任务都添加到内部图中,以根据 Turborepo pipeline 中定义的所有推断关系来映射依赖项。此任务图允许 Turborepo 有效地调度增量并发任务运行并缓存任务输出以供以后使用。
我们对内部任务调度器和生成的图结构进行了重大改进,从而带来了更好的性能和更好的开发体验。例如,在许多情况下,您将不再需要使用 --include-dependencies。相反,在指定任务入口点后,改进后的新图将自动为您处理此图解析。
缓存输出完整性和签名验证
您现在可以配置 Turborepo,使用HMAC-SHA256和密钥对远程缓存输出进行签名,然后再将其上传到远程缓存。当 Turborepo 下载已签名的缓存工件时,它现在将验证工件的完整性和真实性。任何未能验证的工件都将被 Turborepo 忽略、丢弃并视为缓存未命中。
要启用此功能,请在您的 turbo.json 配置文件中将 remoteCache 选项设置为包含 signature: true。然后通过声明 TURBO_REMOTE_CACHE_SIGNATURE_KEY 环境变量来指定您的密钥。


其他错误修复和改进
--sso-team标志现在允许拥有SAML令牌的团队通过turbo login以正确的团队权限登录--log-output标志允许您控制哪些日志打印到终端以及何时打印,让您只关注新内容- 现在支持
FORCE_COLOR环境变量 TURBO_FORCE=true环境变量现在将强制执行--remote-only和TURBO_REMOTE_ONLY=true将告诉turbo只使用远程缓存- 当至少有一个任务尝试时,我们现在显示
>>> FULL TURBO - Yarn v2+与Plug'n'Play (PnP linker)支持
turbo run命令,但turbo prune仍未完全支持 - 修复了指定
--profile时chrome tracing的回归问题 - 您现在可以使用
--concurrency=50%将并发设置为CPU百分比
我们正在招聘!
Vercel的Turborepo团队正在招聘!我们今年已经有五名核心团队成员,并且正在招聘更多。我们正在寻找全职的高级构建系统工程师。
下一步是什么?
除了无缝增量采用/迁移和加速CI/CD之外,我们一直致力于改进Turborepo的日常人体工程学、安全性和可观察性。新的 --filter 标志、签名工件和模拟运行是实现这些目标的重要步骤。
接下来,我们将专注于增强本地开发体验、代码库自动化和整体CLI性能。
感谢各位贡献者
Turborepo是95多位独立开发者和我们核心团队共同努力的成果。
本次发布由以下贡献者促成:@gsoltis09, @jaredpalmer, @gaspar09, @shuding, @rajatkulkarni95, @VanTanev, @Kikobeats, @tknickman, @thebanjomatic, @chelkyl, @elado, @finn-orsini, @becca, @weyert, @ekosz