package.json 文件中 semver 符号的确切用法是什么?

What is the exact use of semver notation in package.json file?

我想知道 package.json 中的 semver 符号 之间的确切区别。谁能给我解释一下。

Semver 表示法在 package.json.

中并不是特别 used

如果遵循 (*1),它可以帮助开发人员了解对任何特定更新的期望。想象一下,您想要提升一个库的版本,您发现差异在于版本的 major 部分(n.*.* 中的 n)。这可以指出升级包的潜在影响 - 根据 SEMVER MAJOR version when you make incompatible API changes,.

*1 开发人员并不总是遵循它。一个突出的例子是 React Native。开发人员从未发布过主要版本,并将 MINOR 视为 MAJOR

我认为 npm 文档解释得很好:https://docs.npmjs.com/cli/v6/using-npm/semver#advanced-range-syntax

由于发生了很多事情,也许对最常见的两个进行简要解释:

插入符修饰符 (^) 将自动转到最高的次要版本和补丁版本,除非 主要版本为 0。在这种情况下,只会更新补丁版本。

波浪号修饰符 (~) 只会转到最高补丁版本。所以 ~ 和 ^ 在主要版本为 0 时是相等的。

我从节点 js 文档中得到了这个。问题解释的很好

https://nodejs.dev/learn/the-package-lock-json-file

在 package.json 中,您可以使用 semver 表示法设置要升级到的版本(补丁或次要版本),例如:

  • 如果你写~0.13.0,你只想更新补丁版本:0.13.1 可以,但 0.14.0 不行。
  • 如果你写^0.13.0,你想得到 不更改最左边 non-zero 数字的更新:0.13.1, 0.13.2 等等。
  • 如果你写 ^1.13.0,你将获得补丁和次要版本:1.13.1、1.14.0 等等直到 2.0.0 但不是 2.0.0。
  • 如果你 写 0.13.0,这是将要使用的确切版本,总是