Turborepo 通过分析、缓存、并行化和优化构建任务,帮助管理大型 JavaScript 或 TypeScript monorepo,从而加速构建过程。在大型 monorepo 中,项目之间通常存在相互依赖关系;每次更改时重新构建所有依赖项既低效又耗时,而 Turborepo 简化了这一过程。与Nx 不同,Turborepo 的默认配置使用多个 package.json
文件(每个项目一个)。这种方式允许在单个 monorepo 中包含不同版本的依赖项(如不同版本的 React),而 Nx 并不提倡这种做法。尽管这可能被视为一种反模式,但它确实能够解决某些特定用例,例如从多仓库迁移到 monorepo 的过程中,团队可能暂时需要多个版本的依赖项。根据我们的经验,Turborepo 设置相对简单且性能表现优秀。
单一代码库的话题似乎永远会引起我们的兴趣。一些地方已经采用了单一代码库来管理整个组织的代码,而另一些地方则将这个概念应用于某些特定的应用程序,比如移动应用程序或组合的 UI/BFF 开发。无论单一代码库是否适合使用,行业似乎都在重新寻找能够有效地管理大型代码库并将它们构建成可部署单元的工具。
Turborepo 是这个领域中的一个相对较新的工具,它为大型的 JavaScript 或 TypeScript 代码库提供了一种与 Nx 或 Lerna 不同的选择。大型代码库的挑战之一是如何快速地执行构建,以使其不会中断开发者的流程或降低效率。
Turborepo 是用 Rust 编写的,这使得它有不错的性能;它还采用递增构建和缓存中间步骤的方法,进一步加速构建过程。但是,它会改变开发者工作流程,需要时间学习,并且最适用于具有需要多个不同的方法独立构建的大型代码库。
我们发现 Turborepo 的文档很少,这导致一些团队目前仍然坚持使用更成熟的工具。然而,Turborepo 及其新的伴侣 Turbopack (目前处于测试版)是否继续发展仍值得评估和查看。