在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
当前回答
^ is 1 [any] [any] (latest minor version) ~ 是 1.2 [any] (latest patch)
一个很好的阅读是这个博客帖子关于如何半数适用于npm和他们正在做什么,使它符合半数标准 http://blog.npmjs.org/post/98131109725/npm-2-0-0
其他回答
• 合理接近
~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 (大版本)
關於這個問題,您可以檢查《作曲者文档》的版本,但在這裡簡短地說:
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 是任何东西
不是一个答案,当然,但一个观察似乎已经被忽略了。
卡雷特的描述范围:
查看: 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 中,不需要单数字字段的数字字段。