Turborepo 1.3
Turborepo 1.3 带来了改进的缓存和灵活性,包括:
- 受限的哈希输入:使用
inputs指定影响缓存的包文件夹中的文件。 - 从单仓根目录运行和缓存脚本:从单仓根目录运行和缓存
package.json脚本。 - 新的 CI/CD 秘籍:我们增加了使用 Turborepo 和流行 CI 提供商的秘籍。
立即运行 npm install turbo@latest 进行更新。
管道 inputs
除了环境变量、依赖项和管道配置,turbo 在计算每个 package.json 脚本的哈希指纹(turbo 用来索引其缓存和确定脚本是否需要重新执行的键)时,会考虑包文件夹中所有未被 Git 忽略的文件。使用 Turborepo 1.3+,您现在可以在 turbo.json pipeline 中指定 inputs 的 glob 模式,以控制哪些文件与特定脚本的缓存相关。这意味着您现在可以在 turbo.json 中表达以下内容:
- 忽略包或应用文件夹中所有 Markdown 文件的更改。
- 如果只有测试文件更改,则无需重新构建应用。
- 只有当包或文件夹中的源文件或测试文件更改时才重新运行测试。
- 等等。
让我们来看一个具体示例:假设我们有一个单仓,其中包含一个 Next.js 应用程序(用于文档网站,位于 ./apps/docs-site),一些包,以及单仓根目录 ./docs 文件夹中的一些 Markdown 文件。
假设 Next.js docs-site 渲染 ./docs 文件夹中的 Markdown 文件。我们现在可以在应用的 package.json 中设置 build 脚本,使用 turbo.json 中的 inputs 来更好地指定哪些文件是相关的(以及哪些应该影响缓存),如下所示:


注意:与 outputs 一样,inputs 是相对于相关的 package.json 定义的,但它们可以位于给定文件夹之外(例如 ../../docs/**)。
从单仓根目录运行和缓存脚本
从 1.3 版本开始,turbo 现在可以从单仓根目录的 package.json 文件中运行和缓存脚本,这将在迁移到 Turborepo 时提供显著帮助。
要进行设置,请在 turbo.json 的 pipeline 配置中,使用 "//#<script>": {...} 形式指定一个根脚本。// 告诉 turbo 该脚本是相对于单仓根目录的,而不是每个工作区包的。
关于根脚本和执行范围,有 2 个重要事项需要注意:
- 如果您的
pipeline中已经有"build": {...},但希望在运行turbo run build时包含单仓根目录package.json文件中定义的build脚本,您可以通过在配置中也包含"//#build": {...}来选择将根目录纳入执行范围。 - 相反,如果您只需要
"//#my-script": {...},则无需定义一个通用的"my-script": {...}条目。
一个定义根脚本 check-examples 并选择将根目录纳入 test 的示例管道可能如下所示:


注意:我们建议在 pipeline 中声明根任务时指定 inputs 以改善缓存。
新的 CI/CD 秘籍
我们增加了使用 Turborepo 和远程缓存的秘籍,支持:
如果您希望看到此处有其他秘籍,请通过打开 GitHub 讨论 告知我们。
其他错误修复和改进
- 改进了 Git 操作和哈希计算
- 改进了依赖图分析中的循环检测
- 增加了对 Windows ARM 64 位架构的支持
- 改进了远程缓存错误日志记录
- 将 Storybook 添加到设计系统示例中
社区
自 4 月初发布 Turborepo v1.2 以来,我们看到了令人难以置信的采用和社区增长:
- 8.1k+ GitHub 星标
- 27.5 万+ 每周 NPM 下载量(增长约 2 倍)
- 1,200+ Turborepo 社区 Discord 成员
- 通过 Vercel 上的远程缓存节省了 5.8 年的计算时间(增长约 5 倍),现在每周节省超过 7 个月
Turborepo 是包括我们核心团队在内的 136 多位贡献者共同努力的成果。
本次发布由以下贡献者提供:@gsoltis、@nathanhammond、@tknickman、@jaredpalmer、@zvictor、@ObliviousHarmony、@O4epegb、@rafaeltab、@mcmontseny、@bertspaan、@Jastor11 和 @enBonnet
感谢您一直以来的支持、反馈和与我们协作,使 Turborepo 成为您的首选构建工具。