【问题标题】:NPM always install latest prerelease versionNPM 总是安装最新的预发布版本
【发布时间】: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 这样的较新的预发布版本在我的约束范围内?

标签: npm npm-install semantic-versioning


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 2020-04-06
    • 1970-01-01
    相关资源
    最近更新 更多