为什么添加插入符或波浪号会导致我的 semver 版本无效?

Why does adding a caret or tilde cause my semver version to be invalid?

我正在使用这个包:https://github.com/npm/node-semver 在我正在处理的项目中进行一些简单的 semver 版本比较(我正在使用最新的 5.3.0 版本)。这似乎是一个非常安全的库。事实上,文档说:

The semver parser for node (the one npm uses)

所以我很惊讶 运行 遇到任何问题。在使用一些非常基本的版本时使用任何比较函数时,我会得到一个 TypeError: Invalid Version,例如:^1.2.3~1.2.3 等。一切都按预期工作,只要我排除 carets/tildes 但这似乎是 真正 基本的东西。我是否遗漏了一些明显的东西?

示例(我只是 运行 这些在 Gulp 任务中):

// logs 1.2.3
console.log(semver.valid('1.2.3'));

// logs 'null'
console.log(semver.valid('^1.2.3'));

// logs 'null'
console.log(semver.valid('~1.2.3'));

// logs TypeError: Invalid Version ^1.2.3`
console.log(semver.satisfies('1.3.0', '^1.2.3')); 

版本和版本范围是有区别的; 1.2.3是前者,^1.2.3是后者。

^1.2.3~1.2.3不指代任何一个版本;可能有多个版本满足这些范围。