远程缓存
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 进行托管的远程缓存
Turborepo 的创建者和维护者 Vercel 提供了一个与 Turborepo 完全兼容的托管远程缓存。
使用 Vercel 远程缓存是零配置的,并且通过开源的 Vercel 远程缓存 SDK自动与 Vercel 部署集成。
了解有关 Vercel 上的 Turborepo 的更多信息或免费部署模板进行试用。
自托管
您还可以自托管您自己的远程缓存,并通过指定 --api
和 --token
标志来设置远程缓存域,其中 --api
是主机名,--token
是持票人令牌。
或者,在您登录后,可以使用TURBO_API
和 TURBO_TOKEN
系统环境变量来设置远程缓存的相应值。
您可以在此处找到 API 的 OpenAPI 规范。目前,所有版本的 turbo
都与 v8
端点兼容。
社区实现
Turborepo 社区创建了远程缓存的开源实现。
这有帮助吗?