npm版本范围caret(^)在major=0情况下的特殊性

53 阅读1分钟

最近突然发现了自己的一个知识盲点,那就是npm包版本范围的控制。我们都知道semver,x.y.z里面x为major版本,y为minor版本,z为patch版本。当我要指定某一个版本范围的时候,我可以选择Tilde(~)来控制patch版本的范围,用Caret(^)来控制minor和patch的范围。

举个例子 ~1.1.2,对应的版本范围是 >= 1.1.2 && < 1.2.0 ^1.1.2, 对应的版本范围是 >= 1.1.2 && < 2.0.0

这些都非常好记。但是如果major版本为0,这些还成立吗?非常神奇的是Caret(^)出现特殊情况

^0.1.2, 对应的版本范围是 >= 0.1.2 && < 0.2.0

别问我是怎么知道的,都是一部踩坑的血泪史。写这篇短文,希望能帮助大家避坑

Reference

getcomposer.org/doc/article…