在我升级到最新的稳定node
和npm
,我尝试了npm install moment --save
。它使用caret(^)
前缀保存package.json
的条目。以前,它是一个tilde(~)
前缀。
npm
? tilde(~)
和caret(^)
什么区别? 用最简单的术语来说,代字号与最近的次要版本(中间数字)匹配。 ~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 Ranges & 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 解释 - 为什么我的 package.json 中有一个插入符号(^)?” 。
请注意 ,规则适用于 1.0.0 以上的版本,并非每个项目都遵循语义版本控制。对于 0.xx 版本,插入符号仅允许修补程序更新,即它的行为与代字号相同。见“Caret Ranges”
以下是概念的直观解释:
来源: “语义版本 Cheatsheet” 。