关于npm:使用npm命令行更新版本号

6次阅读

共计 2687 个字符,预计需要花费 7 分钟才能阅读完成。

背景

版本号是用于逐渐演进软件的过程中和其使用者之间订立的一套公共规定,Semantic Versioning 语义化版本号则是版本号具体如何约定的一套公共约定。咱们在日常的软件生产过程中,不单只产出软件自身,还会产出一些可供复用的代码包。这些代码包糅合集成在一起从而产出一个残缺的软件及零碎,期间代码包依旧会持续研发增加新个性或是修复旧有问题。在这个趋势之下,基于语义化版本号规定就能更好的细化软件生产及迭代,使软件资产能有序地更新及公布。

版本号根本是由三位数字组成:1   .   0   .   0
[MAJOR].[MINOR].[PATCH]

三位数字别离代表不同意思:

  • MAJOR 进行不兼容的 API 更改时的版本
  • MINOR 以向后兼容的形式增加性能时的版本
  • PATCH 向后兼容的谬误修复程序的版本

具体内容倡议去具体查看 Semantic Versioning 语义化版本号 公约。

问题

团队将局部人手操作交付给 CI/CD 工具,比方此文探讨的软件公布的版本的问题。目前软件公布过程是基于人手间接批改 package.json 文件中的 version 字段来实现版本的更新。在前端开始模块化治理各种公共模块后,将会产出大量的代码包须要保护。把一些人为的操作交付给机器,让机器帮忙前端共事解决局部反复的工作,也能无效缩小这些环节中的人为谬误。

解决办法

前端目前的代码包管理工具 npm,自身有提供命令工具帮忙编码人员解决版本升级的工作。上面是代码:

$ npm version [<newversion> | major | minor | patch | premajor | preminor | prepatch | prerelease [--preid=<prerelease-id>] | from-git]

'npm [-v | --version]' to print npm version
'npm view <pkg> version' to view a package's published version'npm ls' to inspect current package/dependency versions

应用的规定也是遵循语义化版本号公约而设计,npm 官网实际的细节可看 sermver.inc。

上面是对于版本选项的形容(假如默认版本为 0.2.0):

选项 形容 例子 阐明
major 重大更新版本 npm version major 0.2.0 =》1.0.0
minor 次要更新版本 npm version minor 0.2.0 =》0.3.0
patch 补丁更新版本 npm version patch 0.2.0 =》0.2.1
premajor 重大更新预公布版本 npm version premajor 0.2.0 =》1.0.0-0
preminor 次要更新预公布版本 npm version preminor 0.2.0 =》0.3.0-0
prepatch 补丁更新预公布版本 npm version prepatch 0.2.0 =》0.2.1-0
prerelease 预公布版本 npm version prerelease 以后版本不是预公布版本的会出错
from-git 拿取 git 的 tag 作为版本号设置至 package.json 内 npm version from-git git 的 tag 标签没有设置的状况下,会抛出谬误

对于 prerelease 的应用是存在前提。以后版本必须是预公布版本,如果不是预公布版本是会抛出谬误的,应用时须要留神。应用 [–preid] 提供额定参数还可用于详细描述预公布版本的作用,比方须要实现上面这种状况:

# 更新为预公布版本号
$ npm version premajor --preid beta
v1.0.0-beta.0

内容援用至:https://docs.npmjs.com/cli/v7…

应用例子

场景 1:简略应用

以后版本:0.2.0

行为:把版本更新至 0.2.1,并在 git 中打上了 v0.2.1 的 tag。

# 更新至新的补丁版本
$ npm version patch

# 打印 git 历史
$ git log
commit 39c8ba50f0ef18aab41ac9c65669b2769ed3b3a7 (HEAD -> master, tag: v0.2.1)
Author: Packy <lpreterite@126.com>
Date:   Wed Apr 7 16:18:22 2021 +0800

    0.2.1
    

场景 2:自定义 git 的提交内容

以后版本:0.2.0

行为:更新版本号并进行 git 提交,自定义提交形容。

$ npm version major -m "版本更新至 %s"
v1.0.0

$ git log
commit 7b9e3102111f8f86fc70d1b1fcab96bb9389df9b (HEAD -> master, tag: v1.0.0)
Author: Packy <lpreterite@126.com>
Date:   Wed Apr 7 17:01:36 2021 +0800

    版本更新至 1.0.0

commit eda4316722a9d03f2fd5e60f61507a6e272ddc1b
Author: Packy <lpreterite@126.com>
Date:   Wed Apr 7 11:01:20 2021 +0800

    chore: 更新 package

场景 3:不进行 git 操作

以后版本:0.2.0

行为:只更改 package.json 文件中 version 字段,并不会进行 git 操作

# 更新至新的补丁版本,并不减少 git 的 tag
$ npm version patch --no-git-tag-version

$ git log
commit eda4316722a9d03f2fd5e60f61507a6e272ddc1b (HEAD -> master)
Author: Packy <lpreterite@126.com>
Date:   Wed Apr 7 11:01:20 2021 +0800

    chore: 更新 package

$ git status
On branch master
Your branch is ahead of 'origin/master' by 6 commits.
  (use "git push" to publish your local commits)

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   package.json

no changes added to commit (use "git add" and/or "git commit -a")
正文完
 0