在我升级到最新的稳定节点和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

其他回答

查看NPM Docs 和 Semver Docs:

~版本“大约相当于版本”,将更新您到所有未来的修复版本,而不会增加较小的版本. ~1.2.3 将使用版本从 1.2.3 到 <1.3.0. ^版本“兼容版本”,将更新您到所有未来的较小的/修复版本,而不会增加大版本. ^2.3.4 将使用版本从 2.3.4 到 <3.0.0.

查看下面的评论 例外,特别是预一版本,如 ^0.2.3

Tilde ~ 相匹配较小的版本,如果您安装了一个包含 1.4.2 并在您的安装后,版本 1.4.3 和 1.4.4 也可用,如果在您的 package.json 它被用作 ~1.4.2 然后 npm 安装在您的项目后升级将安装 1.4.4 在您的项目。

Caret ^ 相匹配大版本,如果 1.4.2 包安装在您的项目中,并在您的安装 1.5.0 发布后 ^ 将安装大版本。

固定版本 如果您不希望在每个安装中更改包的版本,则使用固定版本与任何特殊字符,例如“1.4.2”

最新版本 * 如果您想要安装最新版本,则仅在包名前使用 *。

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

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

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

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

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

• 合理接近

   ~1.1.5: 1.1.0 <= accepted < 1.2.0

标签: 兼容

   ^1.1.5: 1.1.5 <= accepted < 2.0.0

   ^0.1.3: 0.1.3 <= accepted < 0.2.0

   ^0.0.4: 0.0.4 <= accepted < 0.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