是否有 npm 版本预发布标识符?

Are there npm version prerelease identifiers?

有一个非常方便的 npm version 命令。除了 majorminorpatch 等参数外,它还接受 prereleaseprepatch 等参数
它在文档中说这些命令根据 semver.inc 函数工作。

我对这些 pre 命令有疑问。

假设我目前的版本是 v1.0.0
如果我 运行 npm version prerelease 它会将版本升级到 v1.0.1-0.

是否可以根据 https://github.com/npm/node-semver#prerelease-identifiers 为预发布标识符提供额外的支持?

我希望 npm version prerelease alpha 之类的东西可以将版本升级到 v1.0.1-alpha.0,但这行不通。

我最近一直在看这个,看看是否有关于此事的任何更新......但似乎事情还是一样。

不,npm 版本命令不支持任何 npm 版本预发布标识符。你可以在这里看到团队的推理: https://github.com/npm/npm/pull/12936#issuecomment-248153743

semver (https://www.npmjs.com/package/semver) 确实支持您正在尝试做的事情,因此您可以做的是使用如下命令获取版本:

semver <current version> -i prerelease --preid <prelease identifier>

例如:

semver 1.0.1 -i prerelease --preid alpha

将产生:

1.0.2-alpha.0

有了这个结果,你可以将它传递给 npm 版本(比如在 CI 构建中),像这样:

npm version <resulting version from semver command>

另一种选择是使用semantic-release(一个独立的项目): https://github.com/semantic-release/semantic-release

这将基于提交消息自动进行语义版本控制,但我认为它只适用于 github 存储库托管模块,对此我不确定。

就像提到的其他答案一样,npm 不支持这个,因为 comment

中提到的原因

但是您可以使用 semver 包和 npm 脚本实现相同的效果 在 package.json

中添加如下内容
"scripts": {
  "beta-version-patch": "npm version $(semver $npm_package_version -i prerelease --preid beta)",
  "beta-version-minor": "npm version $(semver $npm_package_version -i preminor --preid beta)",
  "beta-version-major": "npm version $(semver $npm_package_version -i premajor --preid beta)",
  "rc-version": "npm version $(semver $npm_package_version -i prerelease --preid rc)",
  "final-release": "npm version $(semver $npm_package_version -i)"
}

和运行npm run beta-version-patch

为了更通用,您可以使用以下内容:

"scripts": {
  "semver": "npm version $(semver $npm_package_version -i $release --preid $preid)"
}

和 运行 命令如:

release=prerelease preid=alpha npm run semver
release=prerelease preid=beta npm run semver
release=premajor preid=alpha npm run semver

npm 6.4.0 开始,您可以像这样使用 npm version--preid 选项:

$ npm version prerelease --preid=alpha
v0.1.1-alpha.0
$ npm version prerelease --preid=alpha
v0.1.1-alpha.1
$ npm version prerelease --preid=alpha
v0.1.1-alpha.2