使用npm命令行更新版本號

背景

版本號是用於逐步演進軟件的過程當中和其使用者之間訂立的一套公共規則,Semantic Versioning 語義化版本號則是版本號具體如何約定的一套公共約定。咱們在平常的軟件生產過程當中,不單隻產出軟件自己,還會產出一些可供複用的代碼包。這些代碼包糅合集成在一塊兒從而產出一個完整的軟件及系統,期間代碼包依舊會繼續研發添加新特性或是修復舊有問題。在這個趨勢之下,基於語義化版本號規則就能更好的細化軟件生產及迭代,使軟件資產能有序地更新及發佈。前端

版本號基本是由三位數字組成:
   1   .   0   .   0
[MAJOR].[MINOR].[PATCH]

三位數字分別表明不一樣意思:git

  • MAJOR 進行不兼容的API更改時的版本
  • MINOR 以向後兼容的方式添加功能時的版本
  • PATCH 向後兼容的錯誤修復程序的版本

具體內容建議去詳細查看 Semantic Versioning 語義化版本號 公約。npm

問題

團隊將部分人手操做交付給CI/CD工具,好比此文討論的軟件發佈的版本的問題。目前軟件發佈過程是基於人手直接修改package.json文件中的version字段來實現版本的更新。在前端開始模塊化管理各類公共模塊後,將會產出大量的代碼包須要維護。把一些人爲的操做交付給機器,讓機器幫助前端同事解決部分重複的工做,也能有效減小這些環節中的人爲錯誤。json

解決辦法

前端目前的代碼包管理工具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...rest

使用例子

場景1:簡單使用code

當前版本: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")
相關文章
相關標籤/搜索