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

时间:2017-06-15 12:03:06

标签: npm versioning semantic-versioning npm-cli

有一个非常方便的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为预发布标识符提供额外的agrument?

我希望像npm version prerelease alpha这样的内容会将版本提升为v1.0.1-alpha.0,但这不起作用。

3 个答案:

答案 0 :(得分:19)

npm 6.4.0 开始,您可以像这样使用--preid的{​​{1}}选项:

npm version

答案 1 :(得分:2)

我最近一直在看这个问题,看看有没有关于此事的任何更新...但似乎情况仍然相同。

不,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>

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

这将基于提交消息自动化语义版本控制,但我认为它只适用于github repo托管模块,不确定。

答案 2 :(得分:1)

像其他提到的答案一样,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