玖叶教程网

前端编程开发入门

总结使用lerna遇到的问题,工具虽好,但问题也挺多

前言

之前分享过一篇文章前端多包管理工具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的命令非常多,大家可以根据自己的业务需要来使用,遇到问题可以总结一下,然后分享出来!

喜欢我的文章就关注我吧,有问题可以发表评论,我们一起学习,共同成长!

(收藏文章前务必关注一下,万分感谢!!!)

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言