Lerna 概述
Lerna 是一个管理包含多个包的 JavaScript 项目的工具,主要用于 Monorepo 中的包版本管理和发布流程。
核心功能
- 版本管理:统一管理多个包的版本号
- 变更日志:自动生成 CHANGELOG
- 发包流程:一键发布多个包到 npm
- 依赖管理:处理包之间的内部依赖关系
常用命令
初始化
# 初始化 Lerna 项目
npx lerna init
# 使用独立版本模式
npx lerna init --independent
bash
版本模式
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Fixed(默认) | 所有包共享一个版本号 | 紧密耦合的包集合 |
| Independent | 每个包独立版本号 | 松散耦合的工具库 |
日常操作
# 查看所有包
npx lerna list
# 查看过时的包
npx lerna outdated
# 在所有包中执行命令
npx lerna exec -- npm ls --depth=0
# 在有变更的包中运行脚本
npx lerna run build
# 添加包间依赖
npx lerna add @myorg/utils --scope=@myorg/core
bash
版本管理
# 交互式选择版本号
npx lerna version
# 强制指定版本
npx lerna version patch # 1.0.0 -> 1.0.1
npx lerna version minor # 1.0.0 -> 1.1.0
npx lerna version major # 1.0.0 -> 2.0.0
# 基于 conventional commits 自动确定版本
npx lerna version --conventional-commits
bash
发布
# 发布到 npm
npx lerna publish from-package
# 发布到私有 registry
npx lerna publish --registry=https://registry.npmmirror.com
bash
Lerna v7 变化
Lerna v7 进行了重大重构:
- 核心功能更加精简
- 与 NX 的集成更紧密(Lerna 可以使用 NX 的任务图和缓存)
- 部分命令被移除或合并
- 推荐搭配
nx使用以获得更好的性能
Lerna + NX 组合
// lerna.json
{
"packages": ["packages/*"],
"version": "independent",
"npmClient": "pnpm",
"useNx": true
}
json
使用 useNx: true 后,Lerna 的 run 和 exec 命令会委托给 NX 执行,获得任务缓存和并行执行的能力。
发包流程最佳实践
1. 代码开发完成 → git commit
2. 生成变更日志 → lerna version --conventional-commits
3. 运行测试 → lerna run test
4. 构建产物 → lerna run build
5. 发布到 npm → lerna publish from-package
6. 推送标签 → git push --follow-tags
text
↑