这个 npm semver 有啥问题?

Posted

技术标签:

【中文标题】这个 npm semver 有啥问题?【英文标题】:What is wrong with this npm semver?这个 npm semver 有什么问题? 【发布时间】:2019-01-25 06:19:11 【问题描述】:

我想在我的 npm 包的 package.json 中添加以下依赖项:

"redux-saga": "^1.0.0-beta.0 || ^0.16.0"`.

所以当我将我的这个包安装在已经有的不同项目中时

"redux-saga": "^1.0.0-beta.1

我希望 npm/yarn 仅在项目的 node_modules 内安装 1.0.0-beta.1。但是,它会在我的包中传递安装0.16.0

所以我检查了semver calculator 并得到了redux-saga 包的奇怪结果:

^1.0.0-beta.0 || ^0.16.0 只允许 0.16.0 - 这是意料之外的

^1.0.0-beta.0 || ^0.15.0 允许预期

0.15.0 0.15.1 0.15.2
0.15.3 0.15.4 0.15.5
0.15.6 1.0.0-beta.0 1.0.0-beta.1

我在文档中找不到任何解释。我的问题是 - 如果它不是错误,那么为什么 ^1.0.0-beta.0 || ^0.16.0 不允许 1.0.0-beta.1

【问题讨论】:

这对我来说绝对是错误的。 很奇怪,包容性比较似乎被破坏了? <=1.0.0-beta.0 也不包含 beta.0 【参考方案1】:

我的问题已在 npm 社区 forums 上得到解答。

0.16.0 被安装,因为它被标记为 latest,并且 npm 优先考虑 latest 标记。该算法可以在npm-pick-manifest包中找到。

我最终使用yarn resolutions 来解决版本冲突

【讨论】:

感谢您跟进此事。有没有办法在您的查询中否定latest 标记? 最终在一个使用该库的项目中使用yarn resolutions 您的答案中指向yarn resolutions 的链接可能对遇到同样问题的人有用。

以上是关于这个 npm semver 有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

由于以下错误,无法运行任何 npm 命令 - 错误:找不到模块“semver”

npm - Semver 版本控制 - 使用插入符号“^”更新包

npm 是不是支持 semver 中较新的预发布版本?

如何在忽略 semver 的情况下安装 NPM 包?

我想使用 npm 安装 sass,但它会抛出错误:找不到模块“semver”

npm:在linux ubuntu中使用npm命令时找不到模块semver错误[重复]