对于 npm 包的版本,package.json 中的 OR 运算符意味着什么?

Ana*_*mar 8 npm semantic-versioning

npm 版本之间的 OR 运算符 (||) 有何意义?

例如:

"dependencies": {
  "@jupyter-widgets/base": "^1.1.10 || ^2 || ^3"
}
Run Code Online (Sandbox Code Playgroud)

我发现我总是安装版本 3。

101*_*owz 5

正如您所期望的,双管道 OR 运算符允许您创建由其他 semver 字符串组成的 semver。如果满足 OR 的任何操作数,则满足表达式。

在 NPM 依赖项的上下文中,包管理器通常会使用满足 AND 中的 semver 字符串的包的最新版本,package.json在当前环境中工作。例如,如果一个包与 v2 和 v3 的某个依赖项兼容,但不与 v1 或 v4 兼容,则^2 || ^3最好在 semver 中使用。对于大多数人来说,包管理器将安装 v3,但如果 v3 与 macOS 不兼容,包管理器将为 macOS 用户安装 v2。

实际上,OR 运算符在决定安装哪些依赖项时为包管理器提供了更多选项,但在现代 JavaScript 中,没有什么理由使用它,因为您很少能够使用任何给定包的不同主要版本。