39

有一个非常方便的npm version命令。除了 , 之类的参数之外,major它还接受,等参数。 它在文档中说命令按照函数工作。minorpatchprereleaseprepatch
semver.inc

这些pre命令我有一个问题。

说我目前在 version 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但那是行不通的。

4

3 回答 3

82

npm 6.4.0开始,您可以使用如下--preid选项npm version

$ 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
于 2018-08-17T04:35:58.837 回答
5

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

不,npm version 命令不支持 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 托管模块,对此不确定。

于 2018-02-06T19:08:14.897 回答
5

就像提到的其他答案一样,由于此评论中提到的原因,npm 不支持此方法

但是您可以使用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
于 2018-08-01T09:03:56.037 回答