远程缓存
Turborepo 的 任务缓存 通过避免重复工作来节省时间。
但有一个问题:缓存是本地的,仅限于你的机器。当你在使用持续集成系统时,这可能会导致大量重复工作


由于 Turborepo 默认只缓存到本地文件系统,即使所有任务输入都相同,相同的任务 (turbo run build
) 也必须在每台机器上重新执行(你、你的队友、你的 CI、你的 PaaS 等),这会 浪费时间和资源。
须知:
你不需要使用远程缓存也能使用 Turborepo。虽然远程缓存会带来最显著的加速,但即使不使用远程缓存,你也可以加快现有工作流程。
一个共享的缓存
如果可以在你的整个团队(甚至你的 CI)中共享一个 Turborepo 缓存会怎么样?


Turborepo 可以安全地与远程缓存(一个存储你的任务结果的云服务器)通信。这可以通过避免在整个组织内重复工作来节省大量时间。
远程缓存是免费的,可以与 托管提供商 一起使用,也可以作为 自托管缓存 使用。
远程缓存是 Turborepo 的一项强大功能,但能力越大,责任越大。请首先确保你正确地进行了缓存,并仔细检查 环境变量的处理。另请记住,Turborepo 将日志视为工件,因此请注意你打印到控制台的内容。
Vercel
Vercel 远程缓存 在所有计划中均可免费使用,即使你没有在 Vercel 上托管你的应用程序。按照以下步骤为你的仓库启用远程缓存。
本地开发
要将你的本地 Turborepo 链接到你的远程缓存,请使用你的 Vercel 帐户验证 Turborepo CLI。
如果你没有全局安装 turbo
,你也可以使用你的包管理器
如果你的远程缓存配置为使用单点登录,你需要运行 npx turbo login --sso-team=team-name
以获取具有正确权限的缓存令牌。
现在,将你的 Turborepo 链接到你的远程缓存
启用后,对你当前正在缓存的包进行一些更改,并使用 turbo run
对其运行任务。你的缓存工件现在将存储在本地和你的远程缓存中。
要验证,请使用以下命令删除你的本地 Turborepo 缓存
然后,再次运行相同的构建。如果一切正常,turbo
应该不会在本地执行任务。相反,它将从你的远程缓存下载日志和工件,并将它们回放给你。
Vercel 上的远程缓存
如果你正在 Vercel 上构建和托管你的应用程序,一旦你使用 turbo
,远程缓存将代表你自动设置。有关更多信息,请参阅 Vercel 文档。
工件完整性和真实性验证
Turborepo 可以在将工件上传到远程缓存之前使用密钥对其进行签名。Turborepo 在工件上使用 HMAC-SHA256 签名,密钥由你提供。Turborepo 将在下载远程缓存工件时验证其完整性和真实性。任何未能验证的工件都将被忽略,并被 Turborepo 视为缓存未命中。
要启用此功能,请在你的 turbo.json
配置文件中设置 remoteCache
选项,以包含 signature: true
。然后通过声明 TURBO_REMOTE_CACHE_SIGNATURE_KEY
环境变量来指定你的密钥。


远程缓存 API
任何符合 Turborepo 远程缓存 API 规范的 HTTP 服务器都可以实现远程缓存。
Vercel 托管的远程缓存
Vercel,Turborepo 的创建者和维护者,提供了一个与 Turborepo 完全兼容的托管远程缓存。
使用 Vercel 远程缓存 是零配置的,并通过开源 Vercel 远程缓存 SDK 自动与 Vercel 部署 集成。
了解更多关于 Vercel 上的 Turborepo 的信息,或 免费部署一个模板 来试用。
自托管
你也可以自托管你自己的远程缓存,并使用 --manual
标志登录以提供 API URL、团队和令牌信息。
OpenAPI 规范
目前,所有版本的 turbo
都与 v8
端点兼容。
社区实现
Turborepo 社区已经创建了远程缓存的开源实现。