Turborepo 1.6
Turborepo 1.6 改变了 Turborepo 的游戏规则 - 你现在可以在任何项目中使用它了。
- 非 Monorepo 项目中使用 Turborepo: 你的项目构建速度慢吗? 你现在可以使用 Turborepo 加速任何包含
package.json
代码库的构建。 turbo prune
现在支持 npm: 现在在使用npm
的 Monorepo 中也支持修剪你的 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 的一个子集,包括修剪你的 lockfile 中的依赖项。 这意味着我们必须为每个工作区管理器分别实现逻辑。
我们很高兴地宣布,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),情况就越好。 这意味着我们已经能够精确地为那些最需要它的人提供性能提升。