关于npm:Git管理使用shell脚本和nodejs实现快速commit和打tag

思考
前端应用npm和git进行开发工作时,会有版本号或者变更须要同步更新提交。通过commit提交更新信息时,是不是能够将commit信息利用起来,成为咱们工作时变更的版本日志数据?

话不多说,码上分享。

应用形式

执行命令: sh bin/commit.sh

运行步骤

1.输出commit信息
2.抉择更新类型
3.抉择是否提交tag

实现形式

一、 创立相干文件


bin/commit.sh           //执行脚本
bin/commit.js           //日志文件更新
bin/version.js          //package.json版本更新
bin/version_log.json    //版本日志文件
package.json    //npm依赖配置文件

二、 要害代码


先带大家看一下版本日志文件 version_log.json

[
  {
    "date": "2021-01-01 00:00:00",
    "version": "0.0.1",
    "commit": "[更新]创立提交命令及更新日志脚本测试"
  }
]

这是一个规范的json格式文件,通过数组将版本信息存入其中,因为我是将最新的版本放到数组尾部,所以每次只须要提取最初一个匹配到的version信息进行辨认版本号操作

接下来是要害的sh命令,和开发者产生交互,由开发者填写本次的版本更新日志,抉择更新版本的类型,以及是否进行tag标签提交的选项

#!/bin/bash

cd bin/
#=========读取最初一个版本信息=========
versions=($(cat ./version_log.json | awk -F 'version' '/version/{print$0}' | sed 's/ //g'  ))
versions_length=${#versions[@]}
newest_version_str=${versions[versions_length-1]}
newest_version_str_length=${#newest_version_str}
#获取字符前面索引值
newest_version_str_length_end=$[newest_version_str_length-2-11]
old_version=${newest_version_str:11:$newest_version_str_length_end}
versionArr=[]
v=${old_version//./ }
index=0
for i in $v; do
    versionArr[index]=$i
    index=$[index+1]
done

read -p  "请提交变动信息:" commit_msg
#=========执行更新类别抉择(默认bug修复)=========
commitPrefix="[修复]"
echo "====== 1. 迭代 ======"
echo "====== 2. 更新  ======"
echo "====== 3. 修复 ======"
read -p  "请抉择变动类型 (默认:3) :" level

case $level in
    1)  echo '您已抉择版本迭代'
    versionArr[0]=$[versionArr[0]+1]
    versionArr[1]=0
    versionArr[2]=0
    commit="[迭代]"$commit_msg
    ;;
    2)  echo '您已抉择小更新'
    versionArr[1]=$[versionArr[1]+1]
    versionArr[2]=0
    commit="[更新]"$commit_msg
    ;;
    3)  echo '您已抉择修复'
    versionArr[2]=$[versionArr[2]+1]
    commit="[修复]"$commit_msg
    ;;
    *)  echo '您已默认抉择修复'
    versionArr[2]=$[versionArr[2]+1]
    commit="[修复]"$commit_msg
    ;;
esac
now_date=`date "+%Y-%m-%d_%H:%M:%S"`
echo $now_date
version=${versionArr[0]}'.'${versionArr[1]}'.'${versionArr[2]}
echo $version
addInfo="{\"date\":\"$now_date\",\"version\":\"$version\",\"commit\":\"$commit\"}"

#=========更新版本日志文件信息=========
node commit $addInfo
#同步更新package.json版本号
node version
git commit -am $commit

read -p  "是否增加Tag(Git)1/0:" is_add_tag
echo $is_add_tag
if(($is_add_tag == 1 ))
then
  echo "您已抉择推送Git标签,行将执行..."
  git tag $version
  git push origin --tags dev
else
  echo "您未抉择推送Git标签,行将完结..."
  git push origin dev
fi

exit 1

而后是对两个json文件的读写操作node命令

commit.js

//减少更新系统日志性能
const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
const path = require("path");
const fs = require('fs')
var versionStr = ""
if (!process.argv[2]) {
  process.exit()
  return console.error('[打包告诉]未获取到版本信息流,重写失败', err)
}
versionStr = process.argv[2]   
fs.readFile(path.join(__dirname, './version_log.json'), (err, data) => {
  if (err) {
    process.exit()
    return console.error("[打包告诉]文件读取异样:" + err)
  }

  let packagesConfig = JSON.parse(data)
  packagesConfig.push(JSON.parse(versionStr))
  fs.writeFile(path.join(__dirname, './version_log.json'), JSON.stringify(packagesConfig), (err, result) => {
    if (err) {
      return console.error('[打包告诉]version_log.json 重写失败', err)
    }
    process.exit()
    return console.log('[打包告诉]version_log.json 版本更新胜利')
  })
})

verison.js

const path = require("path");
const fs = require('fs')

fs.readFile(path.join(__dirname, '../package.json'), (readFilePackageError, packages) => {
  if (readFilePackageError) {
    process.exit()
    return console.error("[打包告诉]读取package.json谬误:" + readFilePackageError)
  }
  let newVersion
  fs.readFile(path.join(__dirname, './version_log.json'), (readFileLogError, logs) => {
    if (readFileLogError) {
      process.exit()
      return console.error("[打包告诉]读取开发日志产生谬误:" + readFileLogError)
    }
    let logData = JSON.parse(logs)
    newVersion = logData.pop().version
    console.log('[打包告诉]以后最新开发日志版本:V' + newVersion)

    let packagesConfig = JSON.parse(packages)
    packagesConfig.version = newVersion

    fs.writeFile(path.join(__dirname, '../package.json'), JSON.stringify(packagesConfig), (err, result) => {
      if (err) {
        return console.error('[打包告诉]package.json 重写失败', err)
      }
      process.exit()
      return console.log('[打包告诉]package.json 版本更新胜利')
    })

  })
})

原创内容,未经容许禁止转载!

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理