前言
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 package
或npm update package
等同于执行npm install package@latest
或npm 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工具测一测