一个关于lerna version 包版本管理的一个坑

问题描述:

我在发布公司内部框架v1.14.1版本时,其实只修改了drawer组件,但是在打包时候,发现很多其他没修改的包也升级了版本号

问题分析:

发现lerna是将最后一个版本v1.14.0与版本v1.11.2之间进行了比较

执行lerna version命令效果如下:

image.png 网上查询了一下 lerna版本比较的机制是通过 git diff --name-only version1 version2的方式来确定哪些包进行了升级

也就是说 我的lerna是将v1.14.0v1.11.2版本进行了比较,所以我很多没修改的包也进行了版本号升级

为了验证 我执行git diff --name-only v1.14.0 v1.11.2

image.png lerna判定 这些包被修改了,所以需要升级版本号。

在同事电脑上,同一分支执行lerna version,发现他的since版本却是v1.12.0

image.png 也就是说,我预期的since应该是v1.14.0,但是现在却成了老旧的版本,而且在我的电脑上与别人电脑上的since还不一致,说明可能是lerna本地配置的问题。

为了验证我的猜想,我将代码切回v1.11.2版本,然后执行lerna version

image.png

提示当前HEAD已经发布,跳过变更检测了。于是我对代码稍加修改,加了几行打印日志,再执行lerna version也是没有检测到啊代码变更。

想了半天,应该是lerna跳过了变更检测,如果我们执行git diff v1.12.0会发现还是能检测到代码的变更

image.png

哔了个老狗,一个问题没解决,又出来了其他的问题。

lerna的pageages的版本管理中的since到底在哪指定的呢?在github上,有人很早就提出了跟我一样的疑惑

image.png

但是官方给的回复是,lerna现在由Nrwl在进行管理,Nrwl是一家很权威的公司,因为Nrwl捐赠了50000美刀(好像很有道理的样子)。因此lerna不打算对这块逻辑进行修改,因为他属于太久远的历史包袱,一万个草泥马...................

image.png

线索到这里就断了,那么lerna到底是根据什么来判断版本需不需要更新呢?

开动我智慧的小脑筋,百度了一大堆,发现lerna是根据tag来区分上一个版本的。

那么我的tag是不是有问题呢?去代码仓库里看了下,我的tag也是都在的。

于是我又去查了git tag命令的文档发现了一个验证标签的操作

image.png

根据我的since是v1.11.2这个线索来看,我先执行了一把git tag -v v1.11.2,发现是正常通过验证的,在这个版本之后,我又打过v1.13.0这个标签 于是我验证下这个tag发现提示cannot verify a non-tag object of type commit.

image.png

what?无法验证提交类型的非标记对象?问题的原因似乎找到了。那就是我打的这个标签因为没有提交类型。

那么

为什么我的since是1.11.2,我同事的since是1.12.0呢

好像是我一开始怀疑过是tag的问题,我把1.12.0这个tag给删了,又重新打过一次。那么为什么他的tag是好的呢?

只有一种解释就是lerna version比较的是本地的tag标签?

于是我让他去执行git tag -v v1.12.0是正常的,我去执行就是报验证不通过。

问了他打标签的方式是通过sourceTree来打,我是通过命令行,他的标签都是正常的。

于是我把v1.13.0的标签删了,通过sourceTree来打,再执行lerna version,

终于正常了。。。

还剩一个坑,就是为什么我同事的代码没更新,他再执行lerna version也正常了。

猜你喜欢

转载自juejin.im/post/7114538970339344420
今日推荐