在我升级到最新的稳定节点和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 ~ 相匹配较小的版本,如果您安装了一个包含 1.4.2 并在您的安装后,版本 1.4.3 和 1.4.4 也可用,如果在您的 package.json 它被用作 ~1.4.2 然后 npm 安装在您的项目后升级将安装 1.4.4 在您的项目。
Caret ^ 相匹配大版本,如果 1.4.2 包安装在您的项目中,并在您的安装 1.5.0 发布后 ^ 将安装大版本。
固定版本 如果您不希望在每个安装中更改包的版本,则使用固定版本与任何特殊字符,例如“1.4.2”
最新版本 * 如果您想要安装最新版本,则仅在包名前使用 *。
其他回答
• 合理接近
~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
泰勒(~)
大型版本是固定的,小型版本是固定的,相匹配任何构建数字
"express": "~4.13.3"
~4.13.3 意味着它会检查 4.13.x 在哪里 x 是什么
可爱(^)
大型版本是固定的,匹配任何小型版本,匹配任何构建数字
"supertest": "^3.0.0"
^3.0.0 意味着它会检查 3.x.x 在哪里 x 是任何东西
^ is 1 [any] [any] (latest minor version) ~ 是 1.2 [any] (latest patch)
一个很好的阅读是这个博客帖子关于如何半数适用于npm和他们正在做什么,使它符合半数标准 http://blog.npmjs.org/post/98131109725/npm-2-0-0
半体分为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
關於這個問題,您可以檢查《作曲者文档》的版本,但在這裡簡短地說:
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 帖子关于组合器安装和组合器更新之间的差异。