Monorepo架构下的CI流程与版本号管理规范:如何用Lerna优化开发体验

176 阅读2分钟

Monorepo架构下的CI流程与版本号管理规范:如何用Lerna优化开发体验

在Monorepo架构(单仓多包)的开发实践中,版本管理和CI/CD流程往往会面临一些特有的挑战。本文将分享我们团队如何通过引入Lerna工具优化开发流程,减少重复工作,同时保持与Multirepo开发模式的一致性体验。

问题背景:Changeset带来的重复劳动

在feature开发过程中,开发者经常需要多次将fix代码合并到test分支。如果使用Changeset工具,每次合并都需要编写Changeset文件才能触发pipeline的changeset version动作。然而:

  • 这些中间过程的fix信息在最终发版时往往并不重要
  • 重复编写Changeset增加了开发者负担
  • 与Multirepo下的开发体验不一致

解决方案:引入Lerna优化feature→test流程

为了简化开发流程,我们引入了Lerna工具,使得在feature→test分支合并时无需编写Changeset即可触发pipeline流水线动作。

1. 安装与初始化Lerna

npm install -g lerna
lerna init

配置lerna.json文件:

{
  "packages": ["packages/*"],
  "version": "independent",
  "command": {
    "version": {
      "conventionalCommits": true,
      "preid": "alpha"
    }
  }
}

2. CI流程配置

在CI流程中添加以下命令:

npx lerna version --conventional-prerelease --preid alpha --yes --json | tee lerna-version-output.json
npx lerna publish from-package --dist-tag alpha --yes

这样配置后,feature→test的合并将自动触发版本更新和发布流程,无需开发者手动编写Changeset。

release发版流程优化

对于正式发版流程,我们仍然保留了Changeset的使用,但优化了工作方式:

  1. 开发者在需求上线合并到release前,只需编写一次Changeset
  2. 发版人员等待所有需求合并到release后,手动触发pipeline发版
  3. 无需拉取代码进行手动操作

发版命令如下:

npx changeset status --since=master --output=changeset-status.json
npx changeset version  
npx changeset publish

为什么这样设计?

这种混合方案结合了Lerna和Changeset的优势:

  1. ​开发阶段​​:使用Lerna自动管理版本,减少重复劳动
  2. ​发布阶段​​:使用Changeset精确控制版本更新内容
  3. ​一致性体验​​:保持了与Multirepo相似的开发流程

总结

Monorepo架构下的版本管理需要平衡自动化与精确控制的需求。通过合理组合Lerna和Changeset工具,我们实现了开发效率与发布质量的平衡。这套方案特别适合中大型Monorepo项目,希望对面临类似挑战的团队有所启发。