在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。

為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?


当前回答

卡雷特 ^ 包含在同一大范围内的一切,大于一个特定的版本。

tilde 包含在同一小范围内的一切大于一个特定的版本。

例如,要指定可接受的版本范围高达 1.0.4,使用下列合成:

插件发布: 1.0 或 1.0.x 或 ~1.0.4 较小发布: 1 或 1.x 或 ^1.0.4 大型发布: * 或 x

有关序列编辑合成的更多信息,请参见 npm 半数计算器。

此分類上一篇

更多关于 npm 文档 关于 semantic 版本

其他回答

我想添加官方的npmjs文件,其中描述了所有版本特性方法,包括在问题上提到的方法。

value desc
~version Approximately equivalent to version, i.e., only accept new patch versions
See npm semver - Tilde Ranges
^version Compatible with version, i.e., accept new minor and patch versions
See npm semver - Caret Ranges
version Must match version exactly
>version Must be greater than version
>=version etc
<version
<=version
1.2.x 1.2.0, 1.2.1, etc., but not 1.3.0
* Matches any version
latest Obtains latest release

其他版本规格包括 GitHub URL 和 GitHub 用户 repo 、本地路径和包含特定 npm 标签的包

官方DOC

npm docs > package.json > dependencies npm docs > semver > 版本 semver (7)

卡雷特 ^ 包含在同一大范围内的一切,大于一个特定的版本。

tilde 包含在同一小范围内的一切大于一个特定的版本。

例如,要指定可接受的版本范围高达 1.0.4,使用下列合成:

插件发布: 1.0 或 1.0.x 或 ~1.0.4 较小发布: 1 或 1.x 或 ^1.0.4 大型发布: * 或 x

有关序列编辑合成的更多信息,请参见 npm 半数计算器。

此分類上一篇

更多关于 npm 文档 关于 semantic 版本

npm 允许安装一个包的更新的版本,而不是指定的版本. 使用 tilde (~) 为您提供错误修复发布,而 caret (^) 为您提供回归兼容的新功能。

问题是旧版本通常不会得到那么多的错误修复,所以npm使用caret(^)作为默认的 --save。

此分類上一篇

根據:「Semver解釋 - 為什麼我的 package.json 中有一個卡雷特(^)?」

请注意,这些规则适用于 1.0.0 以上的版本,并且不是每个项目都遵循数学版本。 对于 0.x.x 版本,卡雷特只允许修复更新,也就是说,它与 Tilde 相同。

下面是概念的视觉解释:

此分類上一篇: Semantic Versioning Cheatsheet

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”

最新版本 * 如果您想要安装最新版本,则仅在包名前使用 *。

泰勒(~)

大型版本是固定的,小型版本是固定的,相匹配任何构建数字

"express": "~4.13.3" 

~4.13.3 意味着它会检查 4.13.x 在哪里 x 是什么

可爱(^)

大型版本是固定的,匹配任何小型版本,匹配任何构建数字

"supertest": "^3.0.0"

^3.0.0 意味着它会检查 3.x.x 在哪里 x 是任何东西