玩转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
。
我们正在创建一个单一存储库,其中包括后端服务器使用的支付服务。此外,后端服务器和支付服务将共享日志服务。
- 日志服务: 专为跨各种服务进行高效日志记录而设计。
- 支付服务: 负责处理支付相关功能。
- 后端服务器: 执行支付处理并集成日志服务以实现无缝操作。
现在让我们深入研究使用 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 文件。
git config user.name ${username} git config user.email ${email}登录后复制