是否有 npm 版本预发布标识符?
Are there npm version prerelease identifiers?
有一个非常方便的 npm version
命令。除了 major
、minor
和 patch
等参数外,它还接受 prerelease
、prepatch
等参数
它在文档中说这些命令根据 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
有一个非常方便的 npm version
命令。除了 major
、minor
和 patch
等参数外,它还接受 prerelease
、prepatch
等参数
它在文档中说这些命令根据 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