在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
在我升级到最新的稳定节点和npm之后,我尝试了npm安装时刻 --save. 它保存了 package.json 的输入与 caret ^ prefix. 此前,它是一个 tilde ~ prefix。
為什麼這些變化發生在npm? tilde ~ 和 caret ^ 之間的區別是什麼? 對其他人有什麼好處?
当前回答
不是一个答案,当然,但一个观察似乎已经被忽略了。
卡雷特的描述范围:
查看: 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 中,不需要单数字字段的数字字段。
其他回答
只要第一个数字(“大”)至少是1:
它是使用的,当你准备好接受只有错误修复(第三个数字的升级),但不需要任何其他变化,甚至更小的升级,添加功能。
^ 只锁定大编号. 它被用,当您愿意收到错误修复(第三编号的改进)和添加功能的小升级,但不应该破坏现有代码(第二编号的改进)。
除此之外, ^ 不受旧 npm 版本的支持,并且应谨慎使用。
因此, ^ 是一个很好的默认,但它不是完美的. 我建议仔细选择和设置最有用的半导体操作器。
(重定向以避免说“修复”和“错误修复”与冲突使用“修复”,这令人困惑)
一条线路解释
標準版本系統是 major.minor.build (例如 2.4.1)
npm 检查并根据这些字符调整特定包的版本
大型版本是固定的,小型版本是固定的,相匹配任何构建数字
例如: ~2.4.1 意味着它会检查 2.4.x 在哪里 x 是什么
^ : 大型版本固定,匹配任何小型版本,匹配任何构建数字
例如: ^2.4.1 意味着它会检查 2.x.x 在哪里 x 是什么
你可能已经在 package.json 中看到了 tilde(~)和 caret(^)。
当您安装 npm 时刻 --save 时,它将保存包.json 的输入,并使用 Caret (^) 预定。
泰尔德(~)
在最简单的术语中,tilde(~)匹配最新的小版本(中间号)。 ~1.2.3 将匹配所有 1.2.x 版本,但将错过 1.3.0。
卡雷特(^)
它将更新您到最新的主要版本(第一个数字)。 ^1.2.3 将匹配任何 1.x.x 发布,包括 1.3.0,但将停止在 2.0.0。
参考: https://medium.com/@Hardy2151/caret-and-tilde-in-package-json-57f1cbbe347b
蒂尔德:
关心:
^ 只冻结大编号. 它是当你仔细观察你的依赖,并准备快速改变你的代码,如果小编辑将不兼容. 它将更新你到最新的大编辑(第一个编辑)。 ^1.2.3 将匹配任何 1.x.x 编辑,包括 1.3.0,但它将停止在 2.0.0. Caret (^) 会给你回归兼容的新功能。
不是一个答案,当然,但一个观察似乎已经被忽略了。
卡雷特的描述范围:
查看: 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 中,不需要单数字字段的数字字段。