在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。

為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?


当前回答

npm 允许安装一个包的更新的版本,而不是指定的版本. 使用 tilde (~) 为您提供错误修复发布,而 caret (^) 为您提供回归兼容的新功能。

问题是旧版本通常不会得到那么多的错误修复,所以npm使用caret(^)作为默认的 --save。

此分類上一篇

根據:「Semver解釋 - 為什麼我的 package.json 中有一個卡雷特(^)?」

请注意,这些规则适用于 1.0.0 以上的版本,并且不是每个项目都遵循数学版本。 对于 0.x.x 版本,卡雷特只允许修复更新,也就是说,它与 Tilde 相同。

下面是概念的视觉解释:

此分類上一篇: Semantic Versioning Cheatsheet

其他回答

一条线路解释

標準版本系統是 major.minor.build (例如 2.4.1)

npm 检查并根据这些字符调整特定包的版本

大型版本是固定的,小型版本是固定的,相匹配任何构建数字

例如: ~2.4.1 意味着它会检查 2.4.x 在哪里 x 是什么

^ : 大型版本固定,匹配任何小型版本,匹配任何构建数字

例如: ^2.4.1 意味着它会检查 2.x.x 在哪里 x 是什么

關於這個問題,您可以檢查《作曲者文档》的版本,但在這裡簡短地說:

Tilde Version Range (~) - ~1.2.3 相当于 >=1.2.3 <1.3.0 Caret Version Range (^) - ~1.2.3 相当于 >=1.2.3 <2.0.0

因此,使用 Tilde 您将获得自动修复的更新,但小型和大型版本将不会更新;但是,如果您使用 Caret,您将获得修复和小型版本,但您将不会获得大型(破坏变更)版本。

Tilde 版本被认为是“更安全”的方法,但如果你使用可靠的依赖性(保存良好的图书馆),你不应该有任何问题与 Caret 版本(因为小变化不应该是破坏变化。

您可能应该审查此 stackoverflow 帖子关于组合器安装和组合器更新之间的差异。

版本号在合成中,指定每个部分具有不同的含义,合成分为三个部分,分为一个点。

大小小小小小小小小小小小小

大型、小型和折叠代表一个包的不同版本。

npm 使用 tilde (~) 和 caret (^) 指定哪个插件和较小的版本分别使用。

因此,如果你看到 ~1.0.2 它意味着安装版本 1.0.2 或最新的修复版本,如 1.0.4. 如果你看到 ^1.0.2 它意味着安装版本 1.0.2 或最新的小或修复版本,如 1.1.0.

半体分为3个主要部分,由点分裂。

major.minor.patch
1.0.0

这些不同的主要、小型和折叠是用来识别不同的发行。 tide(~)和caret(^)是用来识别哪些小型和折叠版本用于包装版本。

~1.0.1
 Install 1.0.1 or **latest patch versions** such as 1.0.2 ,1.0.5
^1.0.1
 Install 1.0.1 or **latest patch and minor versions** such as 1.0.2 ,1.1.0 ,1.1.1

<major>.<minor>.<patch>-beta.<beta> == 1.2.3-beta.2

使用 npm 半数计算机进行测试. 虽然解释 ^ (包含在同一大范围中的特定版本以上的一切) 和 ~ (包含在同一小范围中的特定版本以上的一切) 不是百分之百正确的,计算机似乎工作好。

允许或取消变更

Pin 版本: 1.2.3. 使用 ^ (像头)。 允许从左边的第二个非零级别更新: ^0.2.3 意味着 0.2.3 <= v < 0.3. 使用 ~ (如尾)。 一般冷冻右级或设置零,如果错过: ~1 意味着 1.0.0 <= v < 2.0.0 ~1.2 意味着 1.2.0 <= v < 1.3.0. ~1.2.4 意味着 1.2.4 <= v < 1.3.0. Ommit 右级别: 0.2 意味着 0.2 <= v < 1. 不同于 ~ 因为: 开始错过的级别版本

设置大级启动,并允许更新向上

*  or "(empty string)   any version
1                         v >= 1

~0 (0)            0.0 <= v < 1
0.2               0.2 <= v < 1          // Can't do that with ^ or ~ 
~1 (1, ^1)        1 <= v < 2
^1.2              1.2 <= v < 2
^1.2.3            1.2.3 <= v < 2
^1.2.3-beta.4     1.2.3-beta.4 <= v < 2

冷却低水平

^0.0 (0.0)        0 <= v < 0.1
~0.2              0.2 <= v < 0.3
~1.2              1.2 <= v < 1.3
~0.2.3 (^0.2.3)   0.2.3 <= v < 0.3
~1.2.3            1.2.3 <= v < 1.3

~1.2.3-beta.4     1.2.3-beta.4 <= v < 1.2.4 (only beta or pr allowed)
^0.0.3-beta       0.0.3-beta.0 <= v < 0.0.4 or 0.0.3-pr.0 <= v < 0.0.4 (only beta or pr allowed)
^0.0.3-beta.4     0.0.3-beta.4 <= v < 0.0.4 or 0.0.3-pr.4 <= v < 0.0.4 (only beta or pr allowed)

解除更新

1.2.3             1.2.3
^0.0.3 (0.0.3)    0.0.3

注意: 缺失大、小、修复或指定无数的beta,与缺失的水平相同。