Turborepo 1.6
Turborepo 1.6 改变了 Turborepo 的游戏规则——您现在可以在任何项目中使用它。
- 非 Monorepo 项目中的 Turborepo:您的项目构建缓慢吗?您现在可以使用 Turborepo 在任何包含
package.json的代码库中加速构建。 turbo prune现已支持 npm:现在,使用npm的 Monorepo 项目也支持修剪,至此已完成对所有主要工作区管理器的支持。- 更快的缓存:我们改进了本地文件写入的处理方式,这意味着 Turborepo 的缓存速度大幅提升。
立即运行 npm install turbo@latest 进行更新。
任何代码库都可以使用 Turborepo
Turborepo 帮助加速代码库中的任务。到目前为止,我们一直为 Monorepo(包含多个应用程序和包的代码库)专门构建 Turborepo。
Turborepo 在 Monorepo 中表现出色,因为它们有如此多的任务需要处理。每个包和应用程序都需要构建、lint 和测试。
但我们开始思考:许多不是 Monorepo 的代码库也运行着大量的任务。大多数 CI/CD 过程都会做很多重复工作,而这些工作将受益于缓存。
因此,我们很高兴地宣布,现在任何代码库都可以使用 Turborepo。
现在就从示例开始试用,或者将 Turborepo 添加到现有项目中。
将 Turborepo 添加到您的项目中
- 安装
turbo
- 在您新仓库的根目录添加一个
turbo.json文件


- 尝试使用
turbo运行build和lint
恭喜——您刚刚使用 turbo 运行了您的第一个构建。您可以尝试
何时应该使用 Turborepo?
Turborepo 对非 Monorepo 项目可用,开辟了许多新的用例。但何时是它最佳的使用时机呢?
当脚本相互依赖时
您应该使用 turbo 来运行您的 package.json 脚本。如果您有多个相互依赖的脚本,您可以将它们表示为 Turborepo 任务。


然后,您可以运行
因为您已经声明 build 应该在 lint 和 test 之前运行,所以当您运行 lint 或 test 时,它会自动为您运行 build。
不仅如此,它还会为您找出最佳调度。请参阅我们关于优化速度的核心概念文档。
当您想并行运行任务时
想象您正在运行一个Next.js 应用程序,同时也在运行 Tailwind CLI。您可能有两个脚本——dev 和 dev:css。
在您的 turbo.json 中没有添加任何内容的情况下,您可以运行
就像 concurrently 等工具一样,Turborepo 会自动并行运行这两个脚本。
这对于开发模式非常有用,但也可以用来加速 CI 上的任务——想象您有多个脚本要运行
Turborepo 会找出并行运行所有任务的最快方式。
Prune 现已支持 npm
在过去的几次发布中,我们一直在为不同的工作区管理器添加对turbo prune 的支持。这是一个挑战——turbo prune 会创建您的 Monorepo 的子集,包括修剪锁文件中的依赖项。这意味着我们必须为每个工作区管理器单独实现逻辑。
我们很高兴地宣布 turbo prune 现在支持 npm,完成了对所有主要包管理器的支持。这意味着如果您的 Monorepo 使用 npm、yarn、yarn 2+ 或 pnpm,您将能够轻松部署到 Docker。
查看我们之前的关于 turbo prune 的博客以了解更多信息。
缓存性能改进
在 1.6 版本之前,Turborepo 的本地缓存是系统上文件到磁盘上另一个位置的递归复制。这非常慢。这意味着对于我们需要缓存的每个文件,我们都需要执行六个系统调用:源文件的打开、读取和关闭;目标文件的打开、写入和关闭。
在 1.6 版本中,我们将其减少了近一半。现在,在创建缓存时,我们创建一个单独的 .tar 文件(一次打开),以 1MB 的块写入(批量写入),然后关闭它(一次关闭)。系统调用的减半也发生在从缓存中读取时。
我们不止于此。在过去的一个月里,我们对构建工具链进行了大量投资,以启用 CGO,从而解锁使用 C 语言编写的一流库。这使我们能够采用 Zstandard 的 libzstd 进行压缩,这使我们的压缩性能在算法上提高了 3 倍。
经过所有这些更改后,我们定期看到本地缓存创建的性能提高了 2 倍以上,远程缓存创建的性能提高了 3 倍以上。您的仓库越大,或者您的设备越慢(说的就是你,CI),性能提升就越显著。这意味着我们能够精确地为最需要它的人提供性能优势。