npm中的4位数版本控制

时间:2018-11-16 09:41:03

标签: npm semantic-versioning

我很惊讶npm生态系统中不允许使用4位数版本控制:

https://docs.npmjs.com/about-semantic-versioning

enter image description here

但是,我必须将最终产品从npm合并到允许4位数字的其他系统。所以,我的问题是:

(如何)我们可以为自己的项目使用4位数字设置例外?

1 个答案:

答案 0 :(得分:0)

您问题的直接答案是肯定的。一些支持semver的软件包/版本工具允许使用四位数版本字符串,但是它们无法将其解析为字段,并且必须使用字符串比较或在比较时发出错误,这通常是您不希望在比较版本字符串时发生的。换句话说,您将丢失应该在四个版本字段中编码的所有语义。 (有关NPM's behavior in this case的描述,请参阅“强制”主题)

转化是可能的,但通常很难做到:

即使字段数量匹配,各种1,2,3,4,... n字段版本方案的语义也有所不同。如果存在一个版本字符串(例如“ 1.1.1”)可以正确转换为另一个方案“ 1.1.1”,则这两个方案的语义相同,或者“ 1.1.1”是特例。在字段数变化的情况下,较小方案的字段集可能会定位在较大方案字段内的固定偏移处(其余字段具有恒定值)。也可以提取较大方案字段的子集,以转移到较小方案字段中。无论如何,在不违反一个或两个方案的语义的情况下,不可能有一个适用于较大和较小方案的版本字符串。

从一种方案转换为另一种方案,需要深刻理解两种方案的语义。从本质上讲,四位数方案中的许多方案都带有附加的构建计数器:

X.Y.Z.B
X is major or breaking changes.
Y is minor or non-breaking feature changes.
Z is patch or non-breaking changes that do not add features.
B counts from zero after the last X/Y/Z change.

如果没有X'.Y'.Z'.0-X'.Y'.Z'.n的整个发行历史以及某些检测新功能并在n和{之间建立中断的方法,则无法从这种方案转换为semver。 {1}}。在诸如Nuget / .NET之类的情况下,您可以将B字段锁定为零并将semver应用于其余字段,然后从Neget / .Net进行转换涉及删除多余的字段,而从semver进行转换则意味着将n+1附加到版本。

要么采用semver,要么不采用。如果不是这样,您只需要忍受各种工具来困扰您的不兼容版本字符串。