玩转Lerna,助你轻松搭建Monorepo

什么是 Monorepo?

monorepo是具有多个相关服务、项目和组件的单个存储库,不同的团队可以使用它来存储相关或不相关项目的代码。monorepo 一词源自 mono,意思是单个,而 repo 是存储库的缩写。

Monorepo 的好处

以下是使用 monorepo 的一些主要好处:

  • 代码共享: 项目共享标准代码、库或实用程序。
  • 可重用性:组件需要在不同的项目中重用。
  • 更轻松的代码审查:代码审查在 monorepo 中更加高效,因为审查者可以轻松查看相关项目之间的更改上下文,这可以提高代码质量并更早发现潜在问题。
  • 简化 CI/CD 流程:使用单一存储库同时发布多个项目变得更加简单。
  • 一致的依赖关系管理:项目共享相似或重叠的依赖关系,并且您希望集中管理依赖关系。
  • 团队协作:从事相关项目的团队可以在单一存储库中更有效地协作,共享知识、见解和资源。
  • 微服务架构: 在处理一组密切相关的微服务时,单一存储库可以简化跨服务的代码共享、依赖关系管理和测试。
  • 版本一致性: 所有项目都可以共享标准版本控制架构,从而简化沟通和理解。

专门设计用于使用 Node.js 管理 Monorepos 的库和工具

  • Lerna:一种广泛使用的工具,用于管理具有多个包的 JavaScript 项目。
  • Nx:Nx 专注于 Angular 但适用于其他框架,为 monorepos 提供强大的开发工具,强调高效的工作流程、代码重用和测试。
  • Yarn 工作区:Yarn 的内置 monorepo 功能允许在单个代码库中管理多个包。
  • Rush:微软开发的可扩展的 monorepo 管理器,适用于大型代码库。
  • Bolt:一种单一存储库管理工具,专注于性能,对于某些操作可以比 Lerna 更快。
  • Monorepo Manager:该工具简化了 monorepo 的创建和维护,提供了一个用户友好的界面来管理包、依赖项和脚本。
  • pnpm:与 Yarn 一样,pnpm 还通过其工作区功能支持 monorepo 设置,通过共享依赖项减少重复并提高磁盘空间利用率。

每个工具都提供特定的优点和功能,因此选择取决于您的项目的要求和偏好。

为什么是Lerna?

Lerna是一个设计用于管理包含多个 npm 包的存储库的工具。它简化了在单个git存储库中的多包存储库中处理依赖项、发布和发布包的过程。Lerna 对于 monorepo 特别有用,因为它可以在同一存储库中处理不同 npm 包的开发人员之间实现高效的代码共享和协作。它允许开发人员将具有多个包的项目视为单个实体,从而改进开发生命周期管理。

安装 Lerna 之前的先决条件

  • Git:下载并安装Git
  • Git Bash(终端):如果您使用的是 Windows,Git Bash 包含在 Git 安装中;对于 macOS 和 Linux,请使用系统的终端。
  • Node.js:下载并安装Node.js
  • npm:npm 包含在 Node.js 中,因此一旦安装了 Node.js,npm 就可以在您的终端中使用。通过打开终端并输入进行验证。npm -v

我们正在创建一个单一存储库,其中包括后端服务器使用的支付服务。此外,后端服务器和支付服务将共享日志服务。

  • 日志服务: 专为跨各种服务进行高效日志记录而设计。
  • 支付服务: 负责处理支付相关功能。
  • 后端服务器: 执行支付处理并集成日志服务以实现无缝操作。

image.png

现在让我们深入研究使用 Lerna 实现 Monorepo。

第1步:创建目录并初始化Lerna

导航到项目的根目录并初始化 Lerna:

mkdir monorepo # create a repo directory of the monorepo cd monorepo npx lerna@latest init # initalize the repo登录后复制

package.json:整个存储库的根 package.json 文件。

image.png

git config user.name ${username} git config user.email ${email}登录后复制