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 总是安装最新的预发布版本的主要内容,如果未能解决你的问题,请参考以下文章