Helm版本中*、x/X的含义及版本范围相关技术疑问
npm版本范围表达式疑问解答
1. 各组版本范围表达式的区别
a)
^0与^0.*.0^0等价于^0.x.x,允许所有主版本号为0的版本(即0.0.0 <= v < 1.0.0),包含小版本和补丁版本的所有更新,比如0.1.0、0.1.1、0.2.3都符合要求。^0.*.0等价于^0.x.0,仅允许主版本为0、补丁版本为0的小版本更新,比如0.1.0、0.2.0符合,但0.1.1、0.2.3这类补丁版本不为0的版本不在范围内。
b)
^0.0与^0.*.0^0.0等价于^0.0.x,仅允许主版本和小版本都为0的补丁版本更新(即0.0.0 <= v < 0.1.0),比如0.0.1、0.0.5都符合。^0.*.0是主版本为0、补丁为0的小版本更新,范围是0.1.0 <= v < 1.0.0且补丁号为0,两者的范围完全不重叠。
c)
^0.0.0与^0.*.0^0.0.0只能匹配0.0.0这一个固定版本,没有任何版本更新的空间。^0.*.0允许所有主版本为0、补丁号为0的小版本,比如0.1.0、0.3.0等,范围远大于前者。
d)
^0与^0.*- 这两个表达式完全等价,都代表所有主版本号为0的版本(
0.0.0 <= v < 1.0.0),只是写法不同,实际匹配范围没有区别。
- 这两个表达式完全等价,都代表所有主版本号为0的版本(
2. ~1.2 的版本选取规则
~1.2 对应的范围是 1.2.0 <= v < 1.3.0,版本选取分两种情况:
- 若没有
package-lock.json(或yarn.lock)文件,npm会默认安装该范围内的最新版本(也就是范围内的最大版本); - 若存在lock文件,会严格按照lock文件中记录的版本安装,此时可能是范围内的任意版本(取决于lock文件的记录);
- 你也可以手动指定版本号,安装该范围内的任意特定版本。
3. 版本范围中 * 和 x 的区别
在npm的版本范围表达式里,* 和 x 是完全等价的,都是用来表示“任意数字”的通配符。比如:
1.x和1.*都代表所有主版本为1的版本(1.0.0 <= v < 2.0.0);0.*.x和0.x.x都代表所有主版本为0的版本,写法不同但功能一致。
内容的提问来源于stack exchange,提问作者gstackoverflow
相关产品推荐
相关产品推荐

