你是不是也和我一样,总忘记~和^的区别?(哈哈,或者你压根就不知道?)
今天盯着semver的api看了很久(😂源码就不看了,真是的又长又丑),感觉是看到它的规律了。
我们常见的大概有这些:
- ~1.0.0(^1): >=1.0.0 <1.1.0 ( >=1.0.0 <2.0.0)
- ~1.0.1(^1.0.1): >=1.0.1 <1.1.0 (>=1.0.1 <2.0.0)
- ~1.1.0(^1.1.0): >=1.1.0 <1.2.0 (>=1.1.0 <2.0.0)
- ~1.1.1(^1.1.1): >=1.1.1 <1.2.0 (>=1.1.1 <2.0.0)
- ~0.1.1(^0.1.1): >=0.1.1 <0.2.0 (>=0.1.1 <0.2.0)
- ~0.1.0(^0.1.0): >=0.1.0 <0.2.0 (>=0.1.0 <0.2.0)
- ~0.0.1(^0.0.1): >=0.0.1 <0.1.0 (>=0.0.1 <0.0.2)
- ~0.0.0(^0): >=0.0.0 <0.1.0 (>=0.0.0 <0.0.1)
~1.1.0-beta(^1.1.0-beta): >=1.1.0-beta <1.2.0 (>=1.1.0-beta <2.0.0)
以上的大概可以覆盖我们常见的一些情况了,下面分析一下semver是怎么判断的。
1、首先我们把版本分为a、b、c、xx四个位置: a-b-c-xx
2、最小范围不管是“~xxx”还是“^xxx”都是>=xxx
3、最大范围
如果为“~”:取a、b位,a、b位都有的时候直接b位+1,如“~1.1.0”取“1.(1+1).0”, 只有a位的时候“a位+1”,如“~1”取:“ (1+1).0.0”
如果为“^”: 直接从右到左去除无效的0然后看成一个数字,最大位数+1就可以了
比如
1.0.0可以看成100,也就是2.0.0
0.1.1看成11, 也就是0.(1+1).0
0.1.0看成10,也就是0.(1+1).0
0.0.0看成0, 也就是0 .0.(0+1)
以下是我的测试代码:
const semver = require("semver");
const data = "^3.1.4";
const result = ">=3.1.4 <4.0.0";
const validRange = semver.validRange(data);
console.assert(validRange===result);
还没看源码的,不过规则应该差不多吧,如果描述有误还麻烦小伙伴告知一声,欢迎志同道合的小伙伴一起学习,一起交流,一起进步,欢迎入群!
本文介绍了NPM依赖包版本号中~和^的区别,通过例子解析了semver的判断规则,并提供了测试代码帮助理解。核心内容包括版本号的最小和最大范围判断,以及如何根据规则确定版本更新限制。
3071

被折叠的 条评论
为什么被折叠?



