如何管理发布到NPM上包的版本

909 阅读3分钟

大多数软件在发布之前都有beta版 — 该版本包含某些还处于试验阶段的功能,尚未达到生产就绪状态。

常常会有一些beta测试用户群体,他们使用该版本,对其进行测试,提交bug和其他发现的问题。

开发NPM module也有相同的过程,那么我们如何通过NPM部署beta版本呢?

1. 版本号的组成

  • major:代表主版本号,通常在需要提交不能向下兼容的情况下对该版本号进行升级
  • minor:代表次版本号,通常在新增功能时才对该版本号进行升级
  • patch:代表修复版本号,升级该版本号通常代表修复一些bug,但没有新增功能或者存在不向下兼容的功能
  • prerelease:带有该版本号的包通常表示在测试阶段,尚未稳定,通常不建议用户安装。

1.1. prerelease 预发布

  • alpha: 代表内部测试版,会有很多Bug,是比beta更早的版本,一般不建议对外发布
  • beta: 相对alpha版本已有了很大的改进,但还是存在一些缺陷,需要经过多次测试来进一步消除
  • rc:Release Candidate顾名思义就是正式发布的候选版本。和Beta版最大的差别在于Beta阶段会一直加入新的功能,但是到了RC版本,几乎就不会加入新的功能了,而主要着重于除错! RC版本是最终发放给用户的最接近正式版的版本,发行后改正bug就是正式版了,就是正式版之前的最后一个测试版

例如:

1.1.0-alpha.1
1.1.0-beta.1
1.1.0-rc.1

1.2. 自动更新版本号

npm version major 结果0.0.1->1.0.0
npm version minor 结果0.0.1->0.1.0
npm version patch 结果0.0.1->0.0.2
npm version prerelease 结果0.0.1 -> 0.0.2-0
npm version prerelease --preid=beta  结果0.0.1->0.0.2-beta.0
npm version prerelease 0.0.2-beta.0  结果0.0.1->0.0.2-beta.0

1.3. 自动更新版本号并发布

# 自动更新package.json版本号并发布alpha版本
npm version prerelease --preid=alpha && npm publish --tag alpha

# 自动更新package.json版本号并发布beta版本
npm version prerelease --preid=beta && npm publish --tag beta

2. 如何部署beta版

实现新功能之后,我们首先要做的就是像常规发行版本那样,对版本进行修改。

在你的版本末尾添加beta.0非常重要。.0表示它是哪个版本。当我们对beta版进行修补发布新的beta版本时,我们会将.0递增到.1,以此类推。

因此,我们的版本格式应如下所示:3.1.0-beta.0.

接下来,我们将继续提交所有的更改。

除提交以外,给beta版本添加git标签也是一个好习惯。可以通过命令 git tag 3.1.0-beta.0 添加一条标签。

你可以运行 npm version 3.1.0-beta.0来更新package.json,同时创建一个git标签 (参考 npm-version)。

现在可以发布beta版本了。

发布beta版或alpha版和发布最终版非常相似,唯一的区别是publish命令中的 --tag 标志。

发布beta版只需要运行以下命令:

# 发布beta版本
npm publish --tag beta

# 发布alpha版本
npm publish --tag alpha

3. 使用NPM Info查看标签

npm info 是一个很方便的命令,可以用来查看已发布的版本和package的标签。

我们可以看到有一个稳定的3.0.0版本与最新的标签相关联。

另外,我们刚刚创建了一个新的beta标签并将它链接到3.1.0.beta.0版本。如你所见,也已经有一个alpha版4.0.1-alpha.0

4. 通过标签进行NPM install

用户通常使用标准的npm install命令安装库:

npm install —-save libraryname

该命令将获取与最新标签关联的版本。

npmjs.com上仅显示标记为最新的版本

但是也可以安装基于标签的版本,Beta版本使用者可以通过以下方式安装最新版本:

npm install — save libraryname@beta.

5. 结论

标签提供了一种发布预发行版本的好方法,供测试团队使用。

这些预发行版本提供了一种获取新版本库经验和反馈的好方法。