在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
当前回答
Tilde ~ 指定小型版本发布
Caret ^ 指定主要版本发布
例如,如果包版本为 4.5.2,更新时:
~4.5.2 将安装最新版本 4.5.x (MINOR 版本)
^ 4.5.2 将安装最新版本 4.x.x (大版本)
其他回答
帽子匹配可以被认为是“破碎”,因为它不会更新 ^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.
• 合理接近
~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
<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,与缺失的水平相同。
npm 允许安装一个包的更新的版本,而不是指定的版本. 使用 tilde (~) 为您提供错误修复发布,而 caret (^) 为您提供回归兼容的新功能。
问题是旧版本通常不会得到那么多的错误修复,所以npm使用caret(^)作为默认的 --save。
此分類上一篇
根據:「Semver解釋 - 為什麼我的 package.json 中有一個卡雷特(^)?」
请注意,这些规则适用于 1.0.0 以上的版本,并且不是每个项目都遵循数学版本。 对于 0.x.x 版本,卡雷特只允许修复更新,也就是说,它与 Tilde 相同。
下面是概念的视觉解释:
此分類上一篇: Semantic Versioning Cheatsheet
泰勒(~)
大型版本是固定的,小型版本是固定的,相匹配任何构建数字
"express": "~4.13.3"
~4.13.3 意味着它会检查 4.13.x 在哪里 x 是什么
可爱(^)
大型版本是固定的,匹配任何小型版本,匹配任何构建数字
"supertest": "^3.0.0"
^3.0.0 意味着它会检查 3.x.x 在哪里 x 是任何东西