NPM 总是安装最新的预发布版本

Posted

技术标签:

【中文标题】NPM 总是安装最新的预发布版本【英文标题】:NPM always install latest prerelease version 【发布时间】:2019-01-16 16:09:18 【问题描述】:

我目前正在为我的新 npm 包设置预发布(在 dev 标签下)。

在我的暂存环境中,我希望 npm 始终安装 2.0.0 版本的最新预发布版本。因此,我在 package.json 中指定了"<packagename>": ">=2.0.0-dev.0",但 npm 总是安装2.0.0-dev.20180806T153307Z.3eaa718.HEAD,即使我在删除package-lock.json 的情况下进行了全新安装。 根据semver-checker,我的约束与发布到 npm 的预发布相匹配。

【问题讨论】:

请不要在有文字的地方发布图片。剪切并粘贴文本,而不是图像。任何人都不可能获取您的数据副本进行测试。 因为您的日期/时间戳是字母数字的,semver 需要一个词法而非数字的排序顺序。您选择的预发布标签是不幸的。我建议切换到 YYYYMMDD.HHMMSS.Z 格式。 @jwdonahue 对不起,你是对的。我不明白我的格式和你的建议有什么区别。 数字字段按数字排序,字母数字字段按词法排序。数字 11 > 0,词法 0 > 11。词法排序基于用于字符的代码点,而数字排序需要将字符串转换为数字。任何包含非数字内容的虚线字段都是字母数字字段。任何以零开头的虚线字段也是如此,所以我的建议实际上也被打破了。它应该更像 Y.M.D.H.M.S.Z。阅读semver spec。 @jwdonahue 好的,现在我得到了这个词法排序。但是为什么 semver 检查器和 semver 实现的 semver npm 包告诉我像 1.0.0-dev.20180809T143945Z.c0a13a1.HEAD 这样的较新的预发布版本在我的约束范围内? 【参考方案1】:

我终于找到了问题所在。因为此包之前没有发布到 npm 的非开发版本,所以 npm 始终安装连接到 latest 标签的预发布版本(参见问题中的上图)。解决方案是简单地在旧版本下发布fake 版本,例如1.9.9。现在,一个干净的npm install 可以正常工作。

【讨论】:

以上是关于NPM 总是安装最新的预发布版本的主要内容,如果未能解决你的问题,请参考以下文章

npm install 是不是总是获得最新的*兼容*版本的依赖项?

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

将版本设置为最新版本,包括 Gemfile 中的预发布版本

Private NPM:如何安装最新版本的模块?

npm install 不在 GitHub 上安装最新版本

npm 安装 node-hid 失败(安装最新版本的 Nodejs 失败)