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

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


当前回答

查看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

其他回答

泰勒(~)

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

"express": "~4.13.3" 

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

可爱(^)

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

"supertest": "^3.0.0"

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

不是一个答案,当然,但一个观察似乎已经被忽略了。

卡雷特的描述范围:

查看: https://github.com/npm/node-semver#caret-ranges-123-025-004

允许在 [大、小、折叠] 卷中不改变左最不零的数字的变更。

意思是 ^10.2.3 相匹配 10.2.3 <= v < 20.0.0

在版本 11.x.x 到 19.x.x 将打破您的代码。

我认为他们意味着留下了大多数非零数字字段. 在 SemVer 中,不需要单数字字段的数字字段。

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

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

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

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

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

只要第一个数字(“大”)至少是1:

它是使用的,当你准备好接受只有错误修复(第三个数字的升级),但不需要任何其他变化,甚至更小的升级,添加功能。

^ 只锁定大编号. 它被用,当您愿意收到错误修复(第三编号的改进)和添加功能的小升级,但不应该破坏现有代码(第二编号的改进)。

除此之外, ^ 不受旧 npm 版本的支持,并且应谨慎使用。

因此, ^ 是一个很好的默认,但它不是完美的. 我建议仔细选择和设置最有用的半导体操作器。

(重定向以避免说“修复”和“错误修复”与冲突使用“修复”,这令人困惑)

你可能已经在 package.json 中看到了 tilde(~)和 caret(^)。

当您安装 npm 时刻 --save 时,它将保存包.json 的输入,并使用 Caret (^) 预定。

泰尔德(~)

在最简单的术语中,tilde(~)匹配最新的小版本(中间号)。 ~1.2.3 将匹配所有 1.2.x 版本,但将错过 1.3.0。

卡雷特(^)

它将更新您到最新的主要版本(第一个数字)。 ^1.2.3 将匹配任何 1.x.x 发布,包括 1.3.0,但将停止在 2.0.0。

参考: https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b