在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
当前回答
帽子匹配可以被认为是“破碎”,因为它不会更新 ^0.1.2 到 0.2.0. 当软件出现时,使用 0.x.y 版本和帽子匹配只会匹配最后的不同数字(y)。这是为了目的。
规则是:在您的软件尚未成熟时使用 0.x.y 版本,并在您的公共 API 变化时增加中间数字发布它(因此,有 ^0.1.0 的人不会得到 0.2.0 更新,并且它不会破坏代码)。
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.
其他回答
帽子匹配可以被认为是“破碎”,因为它不会更新 ^0.1.2 到 0.2.0. 当软件出现时,使用 0.x.y 版本和帽子匹配只会匹配最后的不同数字(y)。这是为了目的。
规则是:在您的软件尚未成熟时使用 0.x.y 版本,并在您的公共 API 变化时增加中间数字发布它(因此,有 ^0.1.0 的人不会得到 0.2.0 更新,并且它不会破坏代码)。
Given a version number MAJOR.MINOR.PATCH, increment the:
MAJOR version when you make incompatible API changes,
MINOR version when you add functionality in a backwards-compatible manner, and
PATCH version when you make backwards-compatible bug fixes.
查看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
不是一个答案,当然,但一个观察似乎已经被忽略了。
卡雷特的描述范围:
查看: 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 中,不需要单数字字段的数字字段。
你可能已经在 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
半体分为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