远程缓存

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

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

Local caching creates a cache on each system.

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

须知: 

您不必使用远程缓存来使用 Turborepo。虽然远程缓存将带来最显著的速度提升,但您也可以在不使用远程缓存的情况下加快现有工作流程。

单个共享缓存

如果您可以在整个团队(甚至您的 CI)中共享一个 Turborepo 缓存,那会怎么样?

Remote caching creates a shared cache for your entire team.

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

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

远程缓存是 Turborepo 的一个强大功能,但能力越大,责任越大。请务必首先正确缓存,并仔细检查环境变量的处理。另请记住,Turborepo 将日志视为工件,因此请注意您在控制台打印的内容。

Vercel

Vercel 远程缓存在所有套餐中均可免费使用,即使您不在 Vercel 上托管您的应用程序。请按照以下步骤为您的仓库启用远程缓存。

用于本地开发

要将您的本地 Turborepo 连接到您的远程缓存,请使用您的 Vercel 帐户对 Turborepo CLI 进行身份验证。

终端
turbo login

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

终端
pnpm dlx turbo login

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

现在,将您的 Turborepo 连接到您的远程缓存。

终端
turbo link

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

要验证,请使用以下命令删除您的本地 Turborepo 缓存:

终端
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 的托管远程缓存

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

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

了解更多关于Vercel 上的 Turborepo,或免费部署一个模板进行尝试。

自托管

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

终端
turbo login --manual

OpenAPI 规范

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

社区实现

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