package.json中tilde(〜)和caret(^)之间有什么区别?

在升级到最新的稳定nodenpm ,我尝试了npm install moment --save 。 它用caret(^)前缀保存package.json的条目。 以前,它是一个tilde(~)前缀。

  • 为什么在npm进行这些更改?
  • tilde(~)caret(^)之间的区别是什么?
  • 与其他人相比,有什么优势?

  • 用最简单的术语来说,波形符与最新的次要版本(中间数字)匹配。 〜1.2.3将匹配所有1.2.x版本,但会错过1.3.0。

    另一方面,插入符号更轻松。 它会将您更新到最新的主要版本(第一个数字)。 ^ 1.2.3将匹配包括1.3.0在内的任何1.xx版本,但会在2.0.0版本中推迟。

    http://fredkschott.com/post/2014/02/npm-no-longer-defaults-to-tildes/


    我想添加正式的npmjs文档,其中描述了版本特异性的所有方法,包括问题中提到的那些 -

    https://www.npmjs.org/doc/files/package.json.html

    https://docs.npmjs.com/misc/semver#x-ranges-12x-1x-12-

  • ~version “大致相当于版本”请参阅npm semver - Tilde范围和semver(7)
  • ^version “与版本兼容”请参阅npm semver - Caret Ranges&semver(7)
  • version必须完全匹配版本
  • >version必须大于版本
  • >=version
  • <version
  • <=version
  • 1.2.x 1.2.0,1.2.1等,但不是1.3.0
  • http://sometarballurl (这可能是将在本地下载和安装的tarball的URL
  • *匹配任何版本
  • latest获得最新版本
  • 以上列表并非详尽无遗。 其他版本说明符包括GitHub网址和GitHub用户回购,本地路径和包含特定npm标签的包


    Npm允许安装比指定的更新版本的软件包。 使用代字号( ~ )为您提供错误修复版本和插入符号( ^ ),以及向后兼容的新功能。

    问题是旧版本通常不会收到太多的错误修复,因此npm使用脱字号( ^ )作为--save的默认值。

    semver表

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

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

    以下是对这些概念的视觉解释:

    semver图

    来源:“语义版本化作弊表”。

    链接地址: http://www.djcxy.com/p/723.html

    上一篇: What's the difference between tilde(~) and caret(^) in package.json?

    下一篇: Squash my last X commits together using Git