如何使用Lerna管理多个包的多个并发版本?
Lerna 多包多版本并发维护方案
1. 分支管理策略
- 为长期维护的版本线分别建立独立的稳定基线分支:
- 单独维护
2.x分支作为2.x版本的代码基线,所有2.x版本的bug修复、安全补丁都提交到该分支 - 用
main或3.x分支作为3.0+版本的代码基线,新增功能、breaking change迭代都提交到该分支
- 单独维护
- 所有版本的发布操作都从对应版本的基线分支执行,避免不同版本线的代码交叉污染。
2. Lerna 配置调整
- 开启 独立版本模式:在
lerna.json中配置"version": "independent",允许不同包按照自身迭代节奏更新版本号,不需要所有包版本强制同步对齐,适配多包独立维护的场景。 - 如果包之间存在互相依赖,可配置
"hoist": true统一提升公共依赖减少冗余,同时添加"ignoreChanges": ["**/__tests__/**", "**/*.md"]规则,避免非业务代码变更触发不必要的版本更新。
3. 版本发布操作流程
2.x 版本迭代发布
- 切换到
2.x分支,拉取最新代码 - 执行
lerna changed确认当前待发布的变更包 - 执行
lerna version patch或lerna version minor按照语义化版本规则更新2.x相关包的版本号,Lerna会自动生成对应git tag、更新CHANGELOG - 执行
lerna publish from-git发布版本到npm,发布时添加--dist-tag 2.x参数,指定2.x版本的dist标签为2.x,避免用户默认安装到老版本
注意:需要确保npm上对应包的
latest标签始终指向最新的3.x稳定版,2.x版本仅绑定2.x标签,用户需要主动执行npm install <包名>@2.x才能安装旧版本。
3.x 版本迭代发布
- 切换到
3.x或main分支,拉取最新代码 - 首次发布3.0正式版时执行
lerna version major完成版本号更新,后续迭代按照语义化版本规则选择patch/minor/major即可 - 执行
lerna publish from-git发布,默认绑定latest标签即可。
4. 跨版本修复同步
如果遇到需要同时在2.x和3.x版本中修复的安全漏洞或通用bug:
- 先在
2.x分支提交修复代码,完成2.x版本的发布 - 切换到3.x基线分支,使用
git cherry-pick <修复提交的hash值>把修复提交同步到3.x分支,解决冲突后完成3.x版本的更新即可。
内容的提问来源于stack exchange,提问作者iknowmagic
相关产品推荐
相关产品推荐

