前言
之前分享过一篇文章前端多包管理工具lerna使用详解,主要介绍了lerna的基础用法。
最近有些小朋友在使用lerna时遇到了一些问题,这里汇总一下,我们一起来看看如何解决!
问题
如何将已经存在的包迁移至使用lerna管理的工程仓库下?
1)如果你不觉烦可以把代码copy进去,再把commit提交记录也手动迁移;
2)使用lerna import,这个命令可以帮助你迁移已经存在的仓库,并且会迁移整个提交历史。
在把代码push进仓库前需要code review即运行git push命令并不是直接把代码合入master仓库,这种情况下lerna version 或者 lerna publish会报错,该如何解决?
在lerna version 或者 lerna publish 命令后面追加--no-push标志,让lerna跳过向主干push代码的操作,待命令运行完成后自己手动提交。
npm和yarn是通用的包安装工具,它们都被lerna支持,如何公司内部有自己个性化的包安装工具但是lerna并不支持怎么办?
可以在每个包的package.json文件中,自定义postinstall命令,这样在使用lerna bootstrap命令为每个包安装依赖的时候会触发每个包的postinstall命令(当然也可以使用run的其他生命周期),注意不能添加--ignore-scripts标志,这会让lerna不去触发scripts run的生命周期!
为什么在只修改一个包的情况下,运行lerna publish却提示有多个包需要发布?
1)首先lerna肯定检测到有多个包有修改,但是开发者只修改了一个包,所以其他包的diff是从哪里来的?
2)查看lerna源码我们发现,lerna每次发包前都会用本地的代码与本地上一个tag的代码做对比来产生diff(默认diff是以tag来做对比,历史中不存在tag时用commit);
3)那就说明开发者在本次开发之前的最后一次提交没有加tag标签(可能是别人造成的),导致lerna将之前所有没有tag信息的提交算作本次开发的diff;
既然问题已经分析清楚,下面就需要规范一下开发步骤:
1)用git pull/git merge/git fetch等命令从远程拉取代码;
2)使用命令git fetch origin --prune从远程拉取tag记录,这一步至关重要;
3)先在本地运行lerna diff或者lerna changed,如果提示有变化或者有待发布的包,说明上一个开发者的最近一个commit没有加tag,需要联系到他,使用命令git tag -a v1.2 9fceb02 -m 'my description'为最近一个commit补充上tag标签;
4)重复1、2、3步,如果提示无diff,后面就可以开始开发了,发包后,检查最后一次commit是否拥有tag,如果没有请加上(防止坑别人);
可能用到的命令:
1)查看远程tag信息 git ls-remote --tags origin;
2)查看本地tag信息 git tag -l;
3)查看本地最近一个tag: git describe --tags --abbrev=0(lerna用的就是这个命令);
总结
lerna的命令非常多,大家可以根据自己的业务需要来使用,遇到问题可以总结一下,然后分享出来!
喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,共同成长!
(收藏文章前务必关注一下,万分感谢!!!)