提问者:小点点

package.json中的颚化符(~)和插入符号(^)有什么区别?


升级到最新稳定的nodenpm之后,我尝试了npm安装时刻--保存。它用插入符号^前缀将条目保存在package.json中。以前,它是一个颚化符~前缀。

  1. 为什么在npm中进行这些更改?
  2. 颚化符~和插入符号^有什么区别?
  3. 与其他人相比有什么优势?

共3个答案

匿名用户

请参阅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.x1.2.0,1.2.1等,但不包括1.3.0
    • http://sometarballurl(这可能是将在本地下载并安装的tarball的URL
    • *匹配任何版本
    • latest获取最新版本

    上述清单并非详尽无遗。其他版本说明符包括GitHub URL和GitHub用户回购,本地路径和带有特定npm标记的包

    匿名用户

    npm允许安装比指定版本更新的软件包。使用颚化符(~)可以为您提供bug修复版本,使用插入符号(^)也可以为您提供向后兼容的新功能。

    问题是旧版本通常不会收到那么多的bug修复,因此npm使用插入符号(^)作为--save的默认值。

    根据:“Semver解释-为什么在我的package.json中有一个插入符号(^)?”。

    请注意,这些规则适用于1.0.0以上的版本,并不是每个项目都遵循语义版本控制。对于0.x.x版本,插入符号只允许修补程序更新,也就是说,它的行为与颚化符相同。请参阅“插入符号范围”

    下面是概念的直观解释:

    来源:“语义版本控制备忘单”。