【发布时间】: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