升级到最新稳定的node
和npm
之后,我尝试了npm安装时刻--保存
。它用插入符号^
前缀将条目保存在package.json
中。以前,它是一个颚化符~
前缀。
npm
中进行这些更改?~
和插入符号^
有什么区别?
请参阅NPM文档和semver文档:
>
~version
“近似等同版本”,会将您更新到所有未来的修补程序版本,而不会增加次要版本。~1.2.3
将使用从1.2.3到<1.3.0的版本。
^version
“Compatible with version”,会将您更新到所有未来的次要/补丁版本,而不会增加主版本。^2.3.4
将使用从2.3.4到<3.0.0的版本。
有关例外情况,请参阅下面的注释,特别是前一版本的例外情况,如^0.2.3
我还想补充一下npmjs的官方文档,它描述了所有版本特异性的方法,包括问题中提到的方法-
https://docs.npmjs.com/files/package.json
https://docs.npmjs.com/misc/semver#X-ranges-12X-1X-12-
~version
“近似等同版本”请参阅npm semver-tilde范围&;semver(7)^version
“与版本兼容”请参阅npm semver-插入符号范围&;semver(7)版本
必须与版本完全匹配>版本
必须大于版本>=版本
等
<=版本
1.2.x
1.2.0,1.2.1等,但不包括1.3.0http://sometarballurl
(这可能是将在本地下载并安装的tarball的URL*
匹配任何版本latest
获取最新版本上述清单并非详尽无遗。其他版本说明符包括GitHub URL和GitHub用户回购,本地路径和带有特定npm标记的包
npm允许安装比指定版本更新的软件包。使用颚化符(~
)可以为您提供bug修复版本,使用插入符号(^
)也可以为您提供向后兼容的新功能。
问题是旧版本通常不会收到那么多的bug修复,因此npm使用插入符号(^
)作为--save
的默认值。
根据:“Semver解释-为什么在我的package.json中有一个插入符号(^)?”。
请注意,这些规则适用于1.0.0以上的版本,并不是每个项目都遵循语义版本控制。对于0.x.x版本,插入符号只允许修补程序更新,也就是说,它的行为与颚化符相同。请参阅“插入符号范围”
下面是概念的直观解释:
来源:“语义版本控制备忘单”。