blog icon indicating copy to clipboard operation
blog copied to clipboard

lerna 发布失败后的解决方案

Open huruji opened this issue 5 years ago • 0 comments

lerna 作为多个包依赖的管理解决方案,确实解决了很多痛点,我目前在工作和生活中已经大量使用了lerna,但同时也会遇到一些问题,发布失败后的问题是遇到比较频繁的问题,因此记录一下

lerna publish 主要做了以下几件事:

  • 检查从上一个 git tag 之后是否有提交,没有提交就会显示 No changed packages to publish 的信息,然后退出

  • 检查依赖了修改过的包的包,并更新依赖信息

  • 提交相应版本的 git tag

  • 发布修改的包及依赖它们的包

看上去非常理想,但是使用起来可能很蛋疼,往往出问题的可能就是最后一步,发布包的问题,有可能你的网络情况有问题,有可能你没有登录npm(包括公司内部的 registry ),如果你需要发布到指定的 registry 上,你可以在 lerna.json 上指定:

"command": {
    "publish": {
      "message": "chore(release): publish",
      "registry": "http://legos.wq.jd.com/legosv5/registry/"
    }
  },

我已经遇到了好几次这个问题,如下:

关于这个问题,社区也有相应的讨论,可以在 lerna 项目的issue中找到,如 5241894

对此,lerna 到目前为止并没有提供很好的解决方案。

你可以在你这次失败之后使用 from-git 参数,即lerna publish from-git

或者我们可以手动回退 git 到 release 之前的版本,并删除相应的 git tag,如下:

git reset --hard HEAD~1 && git tag -d $(git log --date-order --tags --simplify-by-decoration --pretty=format:'%d' | head -1 | tr -d '()' | sed 's/,* tag://g')

huruji avatar May 21 '19 09:05 huruji