node.js – package.json中的tilde(〜)和插入符号(^)有什么区别?

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

  1. 为什么要进行这些更改npm
  2. tilde(~)和之间有什么区别caret(^)
  3. 有什么优势比其他人好?

答案

用最简单的术语来说,代字号与最近的次要版本(中间数字)匹配。~1.2.3将匹配所有1.2.x版本,但将错过1.3.0。

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

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

 


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

https://docs.npmjs.com/files/package.json

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

  • ~version“大致相当于版本”参见npm semver – Tilde Rangessemver(7)
  • ^version“兼容版本”参见npm semver – Caret Rangessemver(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允许安装比指定版本更新的软件包版本。使用tilde(~)为您提供错误修复版本,而caret(^)也为您提供向后兼容的新功能。

问题是旧版本通常不会收到很多bug修复,所以npm使用caret(^)作为默认值--save

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

请注意,规则适用于1.0.0以上的版本,并非每个项目都遵循语义版本控制。对于0.xx版本,插入符号仅允许修补程序更新,即它的行为与代字号相同。见“Caret Ranges”

以下是概念的直观解释:

来源:“语义版本Cheatsheet”

Tags:,

添加评论

友情链接:蝴蝶教程