在我升级到最新的稳定节点和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.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)
查看NPM Docs 和 Semver Docs:
~版本“大约相当于版本”,将更新您到所有未来的修复版本,而不会增加较小的版本. ~1.2.3 将使用版本从 1.2.3 到 <1.3.0. ^版本“兼容版本”,将更新您到所有未来的较小的/修复版本,而不会增加大版本. ^2.3.4 将使用版本从 2.3.4 到 <3.0.0.
查看下面的评论 例外,特别是预一版本,如 ^0.2.3
npm 允许安装一个包的更新的版本,而不是指定的版本. 使用 tilde (~) 为您提供错误修复发布,而 caret (^) 为您提供回归兼容的新功能。
问题是旧版本通常不会得到那么多的错误修复,所以npm使用caret(^)作为默认的 --save。
此分類上一篇
根據:「Semver解釋 - 為什麼我的 package.json 中有一個卡雷特(^)?」
请注意,这些规则适用于 1.0.0 以上的版本,并且不是每个项目都遵循数学版本。 对于 0.x.x 版本,卡雷特只允许修复更新,也就是说,它与 Tilde 相同。
下面是概念的视觉解释:
此分類上一篇: Semantic Versioning Cheatsheet
帽子匹配可以被认为是“破碎”,因为它不会更新 ^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:
它是使用的,当你准备好接受只有错误修复(第三个数字的升级),但不需要任何其他变化,甚至更小的升级,添加功能。
^ 只锁定大编号. 它被用,当您愿意收到错误修复(第三编号的改进)和添加功能的小升级,但不应该破坏现有代码(第二编号的改进)。
除此之外, ^ 不受旧 npm 版本的支持,并且应谨慎使用。
因此, ^ 是一个很好的默认,但它不是完美的. 我建议仔细选择和设置最有用的半导体操作器。
(重定向以避免说“修复”和“错误修复”与冲突使用“修复”,这令人困惑)