在我升级到最新的稳定节点和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 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 帖子关于组合器安装和组合器更新之间的差异。
其他回答
泰勒(~)
大型版本是固定的,小型版本是固定的,相匹配任何构建数字
"express": "~4.13.3"
~4.13.3 意味着它会检查 4.13.x 在哪里 x 是什么
可爱(^)
大型版本是固定的,匹配任何小型版本,匹配任何构建数字
"supertest": "^3.0.0"
^3.0.0 意味着它会检查 3.x.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
Tilde ~ 指定小型版本发布
Caret ^ 指定主要版本发布
例如,如果包版本为 4.5.2,更新时:
~4.5.2 将安装最新版本 4.5.x (MINOR 版本)
^ 4.5.2 将安装最新版本 4.x.x (大版本)
一条线路解释
標準版本系統是 major.minor.build (例如 2.4.1)
npm 检查并根据这些字符调整特定包的版本
大型版本是固定的,小型版本是固定的,相匹配任何构建数字
例如: ~2.4.1 意味着它会检查 2.4.x 在哪里 x 是什么
^ : 大型版本固定,匹配任何小型版本,匹配任何构建数字
例如: ^2.4.1 意味着它会检查 2.x.x 在哪里 x 是什么