远程缓存(Remote Caching)

Turborepo 的 任务缓存 通过永不重复相同的工作来节省时间。

但是这里有一个问题:缓存仅限于你的本地机器。当你使用持续集成系统时,这可能会导致大量重复工作:

本地缓存在每个系统上创建缓存。

由于 Turborepo 默认只缓存到本地文件系统,相同的任务(turbo run build)必须在每台机器上重新执行(由你、你的团队成员、你的 CI、你的 PaaS 等执行),即使所有任务输入都相同 — 这浪费了时间和资源

Good to know: 

你不必使用远程缓存才能使用 Turborepo。虽然远程缓存会带来最显著的加速,但你也可以在不使用远程缓存的情况下让现有工作流程更快。

单一共享缓存

如果你可以在整个团队(甚至你的 CI)之间共享一个 Turborepo 缓存会怎样?

远程缓存为你的整个团队创建共享缓存。

Turborepo 可以安全地与远程缓存通信 - 一个存储任务结果的云服务器。这可以通过防止整个组织的重复工作来节省大量时间。

远程缓存是免费的,可以与托管提供商一起使用,也可以作为自托管缓存使用。

远程缓存是 Turborepo 的一个强大功能,但是,能力越大,责任越大。请确保你首先正确地进行缓存,并仔细检查 环境变量的处理。 另外请记住,Turborepo 将日志视为制品,所以要注意你在控制台打印的内容。

Vercel

Vercel 远程缓存在所有计划中都是免费使用的,即使你不在 Vercel 上托管你的应用程序。按照以下步骤为你的仓库启用远程缓存。

本地开发

要将你的本地 Turborepo 链接到你的远程缓存,请使用你的 Vercel 账户验证 Turborepo CLI:

Terminal
turbo login

如果你没有安装全局 turbo,你也可以使用你的包管理器:

Terminal
npx turbo login

如果你的远程缓存配置为使用单点登录,你需要运行 npx turbo login --sso-team=team-name 以获取具有正确权限的缓存令牌。

现在,将你的 Turborepo 链接到你的远程缓存:

Terminal
turbo link

启用后,对你当前正在缓存的包进行一些更改,并使用 turbo run 对其运行任务。 你的缓存制品现在将同时存储在本地和远程缓存中。

要验证,请删除你的本地 Turborepo 缓存:

Terminal
rm -rf ./.turbo/cache

然后,再次运行相同的构建。如果一切正常,turbo 不应该在本地执行任务。相反,它会从你的远程缓存下载日志和制品,并重新播放给你。

Vercel 上的远程缓存

如果你在 Vercel 上构建和托管你的应用程序,一旦你使用 turbo,远程缓存将自动为你设置。有关更多信息,请参阅 Vercel 文档

制品完整性和真实性验证

Turborepo 可以在将制品上传到远程缓存之前使用密钥对其进行签名。Turborepo 使用你提供的密钥对制品进行 HMAC-SHA256 签名。 当下载远程缓存制品时,Turborepo 将验证其完整性和真实性。 任何验证失败的制品都将被忽略,并被 Turborepo 视为缓存未命中。

要启用此功能,请在你的 turbo.json 配置中设置 remoteCache 选项以包含 signature: true。然后通过声明 TURBO_REMOTE_CACHE_SIGNATURE_KEY 环境变量来指定你的密钥。

Turborepo logo
./turbo.json
{
  "remoteCache": {
    "signature": true
  }
}

远程缓存 API

任何满足 Turborepo 远程缓存 API 规范的 HTTP 服务器都可以实现远程缓存。

Vercel 托管的远程缓存

Vercel,Turborepo 的创建者和维护者,提供了一个完全兼容 Turborepo 的托管远程缓存。

使用 Vercel 远程缓存是零配置的,并通过开源的 Vercel 远程缓存 SDK 自动与 Vercel 部署集成。

了解更多关于 Vercel 上的 Turborepo免费部署模板来尝试。

自托管

你也可以自托管你的远程缓存,并使用 --manual 标志登录以提供 API URL、团队和令牌信息。

Terminal
turbo login --manual

OpenAPI 规范

目前,所有版本的 turbo 都与 v8 端点兼容。

社区实现

Turborepo 社区已经创建了远程缓存的开源实现。