Appearance
Lerna 详解
简介
Lerna 是一个用于管理包含多个包的 JavaScript 项目的工具。它优化了使用 Git 和 npm/yarn 构建的多包存储库的工作流程,使开发人员能够将大型代码库分解为单独维护的包,同时保持它们在单个存储库中的优势。
安装
全局安装
bash
npm install -g lerna
项目安装
bash
npm install --save-dev lerna
初始化项目
bash
lerna init
此命令将在项目根目录创建以下结构:
lerna.json
packages/
基本配置
lerna.json 是 Lerna 项目的配置文件:
json
{
"packages": [
"packages/*"
],
"version": "0.0.0",
"npmClient": "yarn",
"useWorkspaces": true
}
核心命令
1. 创建新包
bash
lerna create <package-name>
2. 安装依赖
bash
lerna bootstrap
3. 运行脚本
bash
lerna run <script-name>
4. 发布包
bash
lerna publish
版本管理策略
固定模式(Fixed/Locked)
所有包共享一个版本号,使用 lerna publish 时所有包都会更新到相同的版本。
独立模式(Independent)
每个包都有独立的版本号,使用 lerna publish --independent 可以为每个包独立更新版本。
工作流模式
1. Explicit Commits
- 使用
lerna version创建版本和标签 - 使用
lerna publish from-git从 Git 推送包
2. From Package Changes
- 使用
lerna publish from-package从 npm 推送包
最佳实践
1. 包组织
- 将相关的包放在同一个 monorepo 中
- 使用清晰的包命名约定
- 保持包职责单一
2. 依赖管理
- 使用
lerna bootstrap --hoist将公共依赖提升到根目录 - 定期同步依赖版本
3. 工作区集成
与 Yarn Workspaces 或 npm Workspaces 集成:
json
{
"private": true,
"workspaces": [
"packages/*"
]
}
优缺点
优点
- 跨包变更的原子性
- 更简单的依赖管理
- 统一的代码风格和测试
- 便于代码复用
缺点
- 仓库可能变得庞大
- 需要更复杂的权限管理
- 学习曲线较陡峭
与其他工具的比较
Lerna 与 Yarn Workspaces、pnpm Workspaces 等工具相比,更专注于版本管理和发布流程,而 Workspaces 主要关注依赖安装和链接。
迁移指南
从 Multirepo 迁移到 Lerna monorepo:
- 评估现有项目结构
- 决定包的拆分策略
- 设置 Lerna 项目
- 迁移代码和依赖
- 更新 CI/CD 流程