Turborepo 1.2
自从 1 月下旬发布 Turborepo v1.1 以来,我们看到了惊人的采用率和社区增长
- 6.5k+ GitHub 星星
- 140k+ 每周 npm 下载量(自我们上次关于 v1.1 的博客文章以来翻了一番)
- 95+ OSS 贡献者
- 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
将命令执行限制为 monorepo 中匹配的软件包子集,基于名称、文件夹,甚至是否自 git 提交引用以来发生了更改。
看看您可以使用新的 --filter
命令完成的一些示例
--filter=<package_name>
- 按确切的软件包名称或 glob 模式匹配--filter=...<package_name>
- 按软件包名称/glob 匹配,并包含匹配项的所有依赖包--filter=...^<package_name>
- 按软件包名称/glob 匹配,并包含匹配项的所有依赖包,但排除匹配项本身--filter=<package_name>...
- 按软件包名称/glob 匹配,并包含所有匹配软件包的依赖项--filter=<package_name>^...
- 按软件包名称/glob 匹配,并包含所有匹配软件包的依赖项,但排除匹配项本身--filter={./path/to/package}
- 按路径或文件系统 glob 模式匹配--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
turbo run
命令支持带有 Plug'n'Play (PnP linker) 的 Yarn v2+,但turbo prune
仍然不完全支持- 修复了指定
--profile
时 chrome 跟踪的回归问题 - 您现在可以通过 CPU 百分比设置并发性,例如
--concurrency=50%
我们正在招聘!
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