"npm init" 并使用非 semver 标准

"npm init" and using non-semver standards

新建node.js项目时,首先运行如下:

npm init

还有一系列问题可以帮助初始化 package.json 文件。其中一个问题是关于 version.

作为答案提供的版本号应严格遵循 semver 标准。现在,如果我想使用不符合 semver 的不同版本控制标准怎么办?如何强制使用不同的版本标准?我还可以提供新标准的新规则来代替 semver 来执行新的版本控制标准吗?

谢谢。

您永远不应违反使用特定 packaging/distribution 工具所固有的合同。在这种情况下,npm 需要 SemVer,因为它在发布者和消费者之间提供了一个有用的沟通渠道,而且很容易实现自动化。由于您的版本控制方案在错误修复、新功能和重大更改之间没有区别,因此如果您必须使用 npm 作为打包方案,您能做的最好的事情就是将它的映射应用到 SemVer。我可以想到两种方法来实现这一点。

  1. 对所有版本使用 0.0.1 并附加一个包含实际顺序版本的预发行版。这些将按照您期望的方式排序,前提是每个带点的预发布字段都是纯数字,并且它们在语义版本控制方面始终是合法的。
  2. 用户 0.0.X,其中 X 是版本控制方案中最重要的字段,您将其余值作为纯数字点字段放置在 -prerelease 标记中。

这些方案中的任何一个都是合法的 SemVer,并向所有消费者宣布任何新版本都可能是一个重大变化。 SemVer 中的 0.0 前缀本质上意味着所有赌注都被取消了。这样,愿意接受风险的消费者可以自动更新到你的最新版本,而不愿意接受这种风险的消费者可以避免。

基于您的评论的示例:

0.0.1-2018.01
0.0.1-2018.02
0.0.1-2019.03

0.0.2018-01
0.0.2018-02
0.0.2019-03

在提供了上面的示例之后,我个人更喜欢第二种变体而不是第一种变体,但就 SemVer 规则而言,它们实际上是相等的。