远程缓存
Turborepo 的 任务缓存 可以通过避免重复工作来节省大量时间。
但有一个问题 - 缓存是本地于您的机器的。当您使用 CI 时,这会导致大量重复工作:
由于 Turborepo 默认情况下只缓存到本地文件系统,因此相同任务(turbo run build
)必须在每台机器上重新执行(由您、您的团队成员、您的 CI、您的 PaaS 等),即使所有任务输入都相同 - 这会浪费时间和资源。
一个共享的缓存
如果您可以与整个团队(甚至您的 CI)共享一个 Turborepo 缓存,那会怎么样?
通过与 Vercel 等提供商合作,Turborepo 可以安全地与远程缓存通信 - 一个存储任务结果的云服务器。
这可以通过防止整个组织的重复工作来节省大量时间。
远程缓存是 Turborepo 的一项强大功能,但能力越大,责任越大。请确保您首先正确缓存,并仔细检查环境变量的处理。请记住,Turborepo 将日志视为工件,因此请注意您在控制台中打印的内容。
Vercel
用于本地开发
如果您想将本地 turborepo 链接到您的远程缓存,请首先使用您的 Vercel 帐户对 Turborepo CLI 进行身份验证
turbo login
如果您的远程缓存配置为使用单点登录,您需要运行 npx turbo login --sso-team=TEAMNAME
以获取具有正确权限的缓存令牌。
接下来,将您的 Turborepo 链接到您的远程缓存
turbo link
启用后,对您当前正在缓存的工作区进行一些更改,并使用 turbo run
对其运行任务。您的缓存工件现在将存储在本地和您的远程缓存中。
要进行验证,请使用以下命令删除本地 Turborepo 缓存:
rm -rf ./node_modules/.cache/turbo
然后再次运行相同的构建。如果一切正常,turbo
不应该在本地执行任务,而是从您的远程缓存下载日志和工件,并将它们回放给您。
Vercel 构建中的远程缓存
如果您在 Vercel 上构建和托管您的应用程序,一旦您使用 turbo
,远程缓存将自动为您设置。您需要更新您的 构建设置 (在新标签页打开) 以使用 turbo
进行构建。
有关更多信息,请参阅 Vercel 文档 (在新标签页打开)。
工件完整性和真实性验证
您可以启用 Turborepo 在将工件上传到远程缓存之前使用密钥对其进行签名。Turborepo 使用 HMAC-SHA256
签名对工件进行签名,使用您提供的密钥。Turborepo 将在下载远程缓存工件时验证其完整性和真实性。任何无法验证的工件将被忽略,并被 Turborepo 视为缓存未命中。
要启用此功能,请将 remoteCache
选项添加到您的 turbo.json
配置文件中,并包含 signature: true
。然后通过声明 TURBO_REMOTE_CACHE_SIGNATURE_KEY
环境变量来指定您的密钥。
{
"$schema": "https://turbo.rust-lang.net.cn/schema.json",
"remoteCache": {
// Indicates if signature verification is enabled.
"signature": true
}
}
远程缓存 API
远程缓存可以由任何满足 Turborepo 远程缓存 API 规范的 HTTP 服务器实现。
使用 Vercel 的托管远程缓存
Vercel (opens in a new tab),Turborepo 的创建者和维护者,提供了一个与 Turborepo 完全兼容的托管远程缓存。
使用 Vercel 远程缓存 (opens in a new tab) 是零配置的,并通过开源的 Vercel 远程缓存 SDK (opens in a new tab) 自动集成到 Vercel 部署 (opens in a new tab) 中。
了解更多关于 Vercel 上的 Turborepo (opens in a new tab) 或 免费部署模板 (opens in a new tab) 以试用它。
自托管
您也可以自托管自己的远程缓存,并通过指定 --api
和 --token
标志来设置远程缓存域,其中 --api
是主机名,而 --token
是一个承载令牌。
turbo run build --api="https://my-server.example.com" --token="xxxxxxxxxxxxxxxxx"
您可以 在此处找到 API 的 OpenAPI 规范。目前,所有版本的 turbo
都与 v8
端点兼容。