如何生成 NPM 候选版本

Posted

技术标签:

【中文标题】如何生成 NPM 候选版本【英文标题】:How to generate NPM release candidate version 【发布时间】:2018-11-23 13:31:15 【问题描述】:

假设我想生成一个预发布的 NPM 版本。

原来我有这个:

   "version": "0.0.1"

我试过了:

npm version prepatch
npm version prepatch
npm version preminor
npm version preminor

这给了我这个:

v0.0.2-0
v0.0.3-0
v0.1.0-0
v0.2.0-0

这些对我来说似乎没有用,因为它们总是会增加实际版本号,这意味着 npm version patchnpm version prepatch 似乎没有太大区别。

所以我的问题是 - 有没有官方方法可以在命令行使用 npm 生成 alpha/beta 版本?

npm version minor-alpha
npm version minor-beta
npm version minor-rc

类似的东西?

【问题讨论】:

Are there npm version prerelease identifiers?的可能重复 【参考方案1】:

更新

从 npm 6.3.0-next.0 开始,您现在可以在使用 version 标记预发布时使用 --preid

npm version prerelease --preid=next

NPM 链接:https://docs.npmjs.com/cli/version


原答案

很遗憾(也有点讽刺)npm 并不完全支持 semver 的所有功能!

您需要的是一个名为 pre-id 的功能,可以在 semver spec #9 中找到。我已经向 npm 提交了 PR 来修复它,但它被拒绝了。 https://github.com/npm/npm/pull/13794

preids 基本上允许您为预发布指定一个 id,例如:

1.0.0-alpha or 1.0.0-alpha.1

Forrest 在comment 中拒绝了这个提议,并写下了:

经过进一步的考虑和团队内部的讨论,我决定这不是 CLI 团队将要进行的更改。使用预发布版本是一件棘手的事情,而这个功能足以成为一个边缘案例,我认为它会增加而不是减少预发布版本成为猎枪的机会。

我对 footguns 的担忧与 semver@^4 中决定使预发布版本超出 ~ 和 ^ 的匹配范围有关。如果 semver 的行为发生变化,那么有一种方法来选择(然后在其中增加)给定的预发布标识符可能更有意义。在观看了 React 社区在使用带有 peerDependencies 和其他相互关联的软件包套件的预发布版本方面的艰辛之后,很明显 semver 相对于预发布版本的当前行为非常有限。这意味着这种行为很可能会改变。

不过,我认为想要使用预发布版本的用户最好使用第三方工具,例如 npmversion,或者构建使用 npm 版本“xyz-prealpha.2”(或任何适合您的用例的脚本)的脚本) 反而。感谢您的宝贵时间,对于耽搁的时间我深表歉意!

正如他所建议的那样,要使其正常工作,您应该使用支持完整 semver 版本控制的工具。我个人推荐 semver 包,可在此处的 npm 文档中找到 https://docs.npmjs.com/misc/semver

【讨论】:

您可以将更新移到答案的顶部,在长文本下很难看到它。 @MondKin 谢谢,更新了更详细的答案【参考方案2】:

你可以使用:

npm version prerelease --preid=rc

结果: v1.0.0-rc.0

【讨论】:

如何将 v1.0.0-rc.0 升级到 v1.0.0-rc.1 ?【参考方案3】:

npm version prerelease 会生成0.0.0-x 版本

【讨论】:

【参考方案4】:

看起来像:

npm version prerelease

基本上是我要找的,但这并没有在版本中添加 alpha/beta/rc,它只是这样做x.y.z-n

【讨论】:

npm version 确实接受有效的 semver 字符串。例如。 npm version 0.0.2-rc.0

以上是关于如何生成 NPM 候选版本的主要内容,如果未能解决你的问题,请参考以下文章

如何在 npm 脚本中获取包版本和日期?

npm 卡在旧版本上,但似乎有多个版本

Maven安装:? - 如何创建一个发布候选?

生成自定义版本的 Dygraphs

npm 如何提升最新版本

npm install没有创建一个新的package-lock.json