Ledger Live Monorepo 项目:第 2 部分 - 工具(让它闪耀)| 分类帐

Ledger Live Monorepo 项目:第 2 部分 – 工具(让它闪耀)| 分类帐

源节点: 2985172

博客文章系列“Ledger Live Monorepo 项目”的第二篇文章,一位 Ledger 开发人员向我们讲述了 Ledger Live 代码库大规模迁移到 Mono 存储库的故事。 如果您错过了第 1 部分,请在此处查看:

在确定 monorepo 架构是一个可行的解决方案后,我们开始研究可用的工具来实施我们的计划。

处理多个项目

在 Ledger Live 团队中,我们在 JavaScript 生态系统中导航,幸运的是,我们已经知道使用包管理器处理多个项目的几种方法。 其中一些可能的解决方案包括:

  • NPM (支持工作区但有更好的选择),
  • 纱线1 (变得太旧了,更好、更有效的替代方案),
  • 纱线≥2 (有趣的想法,但即插即用并没有得到很好的支持,尤其是 React Native),
  • PNPM (符号链接,考虑到工作空间而构建,磁盘效率高)。

看完所有这些之后,我们决定去 PNPM 为:

  • 磁盘效率(它使用虚拟 商店符号链接,因此包仅下载一次,然后从虚拟商店符号链接到您的node_modules),
  • 速度(由于包被缓存,后续安装速度更快),
  • 内置对工作区/monorepo 架构的支持(别名、编排等……)。

在纸上 PNPM 绝对是一个宝石,但正确设置符号链接有点奇怪(同样,特别是使用 React Native)。

好的,我们的选择已经做出,我们会选择 PNPM。

脚本编排

即使 PNPM 为其功能添加了越来越多的编排,但它仍然没有涵盖我们想做的所有事情,例如:

  • 顺序构建,
  • 缓存。

对于这些,我们发现了两个有趣的竞争者,我们需要看看:

  • NX (由角度团队),
  • 涡轮回购 (当我们开始开发它时,它刚刚发布了 v1.0.0,现在正在与 Vercel 团队合作)。

我们对两者都进行了概念验证。

NX 有更多的功能、生成器、自动化、强大的依赖图等……但是,它增加了很多开销,而且由于它非常固执己见,我们必须遵循他们的约定。

涡轮回购 另一方面,这是非常基本的功能。 然而,它是一种方便的即插即用解决方案,如果有需要,我们可以很快进行更改。

即使 涡轮回购 特征少于 NX,它做了我们正在寻找的两件事:

  • 尊重依赖树(和并发构建)的构建编排,
  • 缓存(如果代码未更改,则构建会被缓存并“重播”)。

再加上方便的进出,让我们选择了街区里的新孩子, 涡轮回购.

版本

我们也研究了几种解决方案,但最终决定使用 https://github.com/changesets/changesets 因为它是 TurboRepo 推荐的一个工具,并且在阅读了一些文档后,它似乎符合我们的需求。

开发人员需要在开发流程中更加严格并提供 changesets (描述其代码更改的库的文件,严重性如下 服务器 惯例,以及变更的描述)。 这些 changesets 然后用于根据给定的严重性自动升级软件包的版本,并自动生成 变更日志。 最重要的是,这些工具允许 pre release 模式,🍰 上的 🍒。

下一步是什么 ?

决定了工具之后,就该开始工作了。 在下一篇博客文章中,我们将讨论单存储库上下文中的构建系统和所有开发操作/自动化/持续集成。


瓦伦丁·德·阿尔梅达
开发者体验和核心技术 – Ledger Live

时间戳记:

更多来自 莱杰