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

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


当前回答

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”

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

其他回答

• 合理接近

   ~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

泰勒(~)

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

"express": "~4.13.3" 

~4.13.3 意味着它会检查 4.13.x 在哪里 x 是什么

可爱(^)

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

"supertest": "^3.0.0"

^3.0.0 意味着它会检查 3.x.x 在哪里 x 是任何东西

^ is 1 [any] [any] (latest minor version) ~ 是 1.2 [any] (latest patch)

一个很好的阅读是这个博客帖子关于如何半数适用于npm和他们正在做什么,使它符合半数标准 http://blog.npmjs.org/post/98131109725/npm-2-0-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

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

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 帖子关于组合器安装和组合器更新之间的差异。