npm 版本号

8,284 阅读2分钟

前言
1.0.0-alpha.1和1.0.0-beta,哪个版本更大?
发版时间是否会影响版本号大小?
如果你已经知道答案,那么你可以不用往下看了。
阅读本文,你将会了解npm版本号的规范,版本号大小如何比较,以及标签和版本号之间的关系。

简介

npm版本号遵循semver规范。版本号格式为major.minor.patch。其中major、minor、patch必须是非0的开头的非负数。

比如1.0.3,0.2.98是有效版本号,而0.1.02,1.a.0是无效版本号。此外,版本号还可以带上预发布和build metadata。

版本号的扩展

预发布

在patch后加上"-"和一串由"."连接的标识符。格式为major.minor.patch-{identifier}.{identifier}.{identifier}。

identifier必须是数字、大小写字母或连字符组成的非空字符串。比如:1.0.3-alpha.1

build metadata

在patch或预发布后面加上"+"和一串由"."连接的标识符。格式为major.minor.patch+{identifier}.{identifier}.{identifier}或者 major.minor.patch{pre-release}+{identifier}.{identifier}.{identifier}。如:1.0.3-alpha.1+001,1.0.0-beta+exp.sha.5114f85

版本号标签

常用的版本号标签有latest(默认),alpha(内测), beta (公测), next(下一个), rc( 候选), experimental(实验)。

给版本号添加标签的方式有两种。一种是在发布时指定标签,如npm publish --tag alpha。另一个种是发布后执行命令npm dist-tag add your-npm-package@1.0.2-1 alpha

版本号大小比较

major.minor.patch-[pre-release]+[build-metadata] 

版本号大小比较是从左到右依次比较major、minor、patch、pre-release。 build-metadata对优先级无影响 。预发布版本优先级低于正式版本,如1.0.1-alpha.1 < 1.0.1,1.0.0-alpha.1 < 1.0.0-beta < 1.0.0

版本号大小与发版时间有关系吗?
答案是没有关系。

例如:依次发布1.0.0-alpha.1,1.0.0-alpha.3,1.0.0-alpha.2。用户安装了1.0.0-alpha.1,此时升级版本会安装1.0.0-alpha.3。

版本号升级与标签之间的关系?
执行npm install packagenpm update package等同于执行npm install package@latestnpm update package@latest。用户当前版本低于latest标签下的最高版本时,升级时会安装latest标签下的最高版本。用户当前版本高于latest标签下的最高版本,而低于其他标签下的版本时,会安装其他标签下的版本。

例如:

  • 用户安装了1.0.0-alpha.1(alpha),此时发布1.0.0(latest),用户升级后的版本是1.0.0(latest)。
  • 用户安装了1.0.0-alpha.1(alpha),此时发布1.0.0-beta.0(beta),用户升级后的版本是1.0.0-beta.0(beta)。
  • 用户安装了1.0.0(latest),此时发布2.0.0-alpha.1(alpha),用户升级后的版本不变,仍然是1.0.0(latest)。

版本号的建议

第一个稳定版本 1.0.0,第一个稳定版本之前的版本0.*.*。

版本号升级时,如果是修复bug,升级patch,如1.0.2 -> 1.0.3。如果是新增可向后兼容的新功能,升级minor,如1.0.2 -> 1.1.2。如果是新增不可向后兼容的新功能,升级major ,如1.9.9 -> 2.0.0。

测一测

以下版本号是否有效

1.0.1-x-y-z-.-

1.0.3--.-.-

1.0.3----

1.0.3--.

版本号大小比较

1.0.3--.-.-与1.0.3---

1.0.0-alpha+001与1.0.0-alpha+002

1.0.0-alpha.1与1.0.0-beta.1

答案

安装semver工具测一测

链接

semver规范

semver工具使用手册