利用 Git 鉤子提交時修改版本號

前端項目在 git 提交時,每每會遺忘更新項目根目錄的 package.json 文件的 version,一般不修改也不會有啥問題,但對於強迫症來講,不能忍!咱要改掉它......前端

編寫一個簡單的 node 腳本 check-version.js

先安裝幾個依賴包 yarn add inquirer chalk child_process -Dnode

// /scripts/check-version.js

const inquirer = require('inquirer')
const chalk = require('chalk')
const { exec } = require('child_process')
const { name: projectName, version: versionCurrent } = require('../package')

const regVersion = /^[1-9]{1}\d*\.\d+\.\d+$/ // 示例: 1.0.0
// const regVersion = /^\d+\.\d+\.\d+$/ // 示例: 0.0.1 / 1.0.1
// const regVersion = /^\d+\.\d+\.\d+(-beta.?\d*)?$/ // 示例: 1.0.3 / 0.0.1-beta / 1.0.0-beta.3

console.log('\n')

// 確認 package.json 版本號
inquirer
  .prompt([
    {
      type: 'input',
      name: 'version',
      message: `請確認 ${projectName}/package.json/version 版本號(當前:${versionCurrent}):\n`,
      default: versionCurrent,
      validate(version) {
        // 校驗版本號的格式
        if (!regVersion.test(version)) {
          console.log(chalk.yellow('輸入的版本號無效,請檢查格式(示例:1.0.0、2.3.2)'))
          return false
        }
        return true
      },
    },
  ])
  .then(({ version: versionNew }) => {
    if (versionNew !== versionCurrent) {
      // 更新 package.json version,更新時不自動生成 tag
      command(`npm --no-git-tag-version version ${versionNew}`, {}, (error, stdout, stderr) => {
        if (!error) {
          console.log(
            chalk.green(
              `\n${projectName} 版本號(項目根目錄下的 package.json/version)更新成功,version: ${versionNew} !`,
            ),
          )
          command(
            `git add package.json && git commit -m 'ci(package.json): 更新項目版本號爲:${versionNew}'`,
          )
          console.log(`\n`)
          process.exit(0)
        } else {
          console.log(chalk.yellow(`\n更新版本號(${versionNew})失敗了~\n`))
          process.exit(1)
        }
      })
    } else {
      console.log(chalk.green(`\n本次版本號未作修改,version: ${versionNew} !\n`))
    }
  })

function command(cmd, options, callback) {
  console.log('\n')
  console.log(chalk.cyan(cmd.toString()))
  return exec(cmd, { ...options }, callback)
}
複製代碼

配置 Git 鉤子

  1. 先安裝 husky,用於管理 git 鉤子,固然,使用原生的也能夠。git

    yarn add husky -D
    複製代碼
  2. 在項目的 package.json 文件中增長如下配置:npm

    "husky": {
      "hooks": {
        "post-commit": "exec < /dev/tty && node scripts/check-version.js"
      }
    },
    複製代碼

使用

完成以上配置後,後續在執行 git commit 提交代碼時,會自動在終端彈出交互,提示修改 package.json 文件的 version,以下圖:json

若是不須要修改直接敲擊 Enter 跳過,須要則輸入新的版本號,會自動執行命令修改 package.json 文件的 version,並自動提交剛剛的修改,接下來 git push 推送代碼便可。bash

相關文章
相關標籤/搜索