Skip to content
On this page

远程缓存

Turborepo 的任务缓存可以节省很多时间,因为它不会重复做同样的工作。

但有一个问题-缓存是本地的计算机。当你和同事一起工作时,这会导致很多重复的工作:

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

一个单独的共享缓存

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

通过与 Vercel 等供应商合作,Turborepo 可以安全地与远程缓存(一种存储任务结果的云服务器)进行通信。

这样可以避免整个组织的重复工作,从而节省大量时间。

WARNING

远程缓存是 Turborepo 的一个强大功能,但是伴随着强大的功能而来的是巨大的责任。首先确保缓存正确,然后再次检查环境变量的处理。还请记住 Turborepo 将日志作为工件对待,所以要注意要打印到控制台的内容。

Vercel

本地开发

如果你想把你的本地 Turborepo 链接到你的远程缓存,首先用你的 Vercel 帐户验证 Turborepo CLI:

bash
turbo login

WARNING

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

接下来,将 Turborepo 链接到远程缓存:

bash
turbo link

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

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

bash
rm -rf ./node_modules/.cache/turbo
bash
rd /s /q "./node_modules/.cache/turbo"

然后再次运行相同的构建。如果工作正常,turbo 不应该在本地执行任务,而应该从远程缓存下载日志和工件并将它们返回给您。

Vercel Builds 上的远程缓存

如果您正在构建和托管您的应用程序在 Vercel,远程缓存将自动设置为您的代表一旦您使用 Turbo。您需要更新您的构建设置,以使用 Turbo 进行构建。

有关说明,请参考 Vercel 文档

完整性和真实性验证

您可以使 Turborepo 在将工件上传到远程缓存之前使用秘钥对它们进行签名。Turborepo 使用您提供的秘密密钥对工件使用 HMAC-SHA256 签名。Turborepo 将在下载远程缓存工件时验证它们的完整性和真实性。任何未能验证的构件将被忽略,并被 Turborepo 视为缓存丢失。

要启用此特性,请将 turbo.json 配置中的 RemoteCache 选项设置为 signature: true。然后通过声明 TURBO_REMOTE_CACHE_SIGNATURE_KEY 环境变量来指定您的密钥。

json
{
  "$schema": "https://turbo.build/schema.json",
  "remoteCache": {
    // Indicates if signature verification is enabled.
    "signature": true
  }
}

自定义远程缓存

您可以自行托管您自己的远程缓存或使用其他远程缓存服务提供商,只要他们符合 Turborepo 的远程缓存服务器 API。

您可以通过指定 --api--token 标志来设置远程缓存域,其中 --api 是主机名, --token 是承载标记。

bash
turbo run build --api="https://my-server.example.com" --token="xxxxxxxxxxxxxxxxx"