在我升级到最新的稳定节点和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

其他回答

我想添加官方的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)

• 合理接近

   ~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 ~ 相匹配较小的版本,如果您安装了一个包含 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 是任何东西

不是一个答案,当然,但一个观察似乎已经被忽略了。

卡雷特的描述范围:

查看: 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 中,不需要单数字字段的数字字段。