以为前端使用npm和git进行开发工作时,会有版本号或者变更需要同步更新提交。在通过commit提交更新信息的时候,commit信息是否可以用来成为我们工作中变更的版本日志数据呢?话不多说,上代码分享。使用方法执行命令:shbin/commit.sh运行步骤1.输入commit信息2.选择更新类型3.选择是否提交tag实现方法1.创建相关文件bin/commit.sh//执行脚本bin/commit.js//日志文件更新bin/version.js//package.json版本更新bin/version_log.json//版本日志文件package.json//npm依赖配置文件2.关键代码先取大家看看版本日志文件version_log。json[{"date":"2021-01-0100:00:00","version":"0.0.1","commit":"[更新]创建提交命令和更新日志脚本测试"}]this是一个标准的json格式文件,版本信息是通过一个数组存储在里面的,因为我把最新的版本放在数组的最后,所以每次只需要提取最后匹配到的版本信息就可以识别版本number,接下来就是keysh命令与开发者交互。开发者填写版本更新日志,选择更新版本类型,提交tag标签的选项#!/bin/bashcdbin/#=========读取最新版本信息=========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=${旧版本//./}index=0我在$v中;doversionArr[index]=$iindex=$[index+1]doneread-p"Pleasesubmitchangeinformation:"commit_msg#=========执行更新类别选择(默认bugfix)=========commitPrefix="[Fix]"echo"======1.迭代======"echo"======2.更新======"echo"======3.Repair======"read-p"Pleaseselectthechangetype(default:3):"levelcase$levelin1)echo'YouhaveSelectversioniteration'versionArr[0]=$[versionArr[0]+1]versionArr[1]=0versionArr[2]=0commit="[iteration]"$commit_msg;;2)echo'您选择了次要更新'versionArr[1]=$[versionArr[1]+1]versionArr[2]=0commit="[Update]"$commit_msg;;3)echo'你选择修复'versionArr[2]=$[versionArr[2]+1]commit="[fix]"$commit_msg;;*)echo'你默认选择修复'versionArr[2]=$[versionArr[2]+1]commit="[fix]"$commit_msg;;esacnow_date=`date"+%Y-%m-%d_%H:%M:%S"`echo$now_dateversion=${versionArr[0]}'.'${versionArr[1]}'.'${versionArr[2]}echo$versionaddInfo="{\"date\":\"$now_date\",\"version\":\"$version\",\"commit\":\"$commit\"}"#=========更新版本日志文件信息=========节点提交$addInfo#同步更新package.json版本号nodeversiongitcommit-am$commitread-p"是否添加Tag(Git)1/0:"is_add_tagecho$is_add_tagif(($is_add_tag==1))thenecho"你已选择推送Git标签,即将执行..."gittag$versiongitpushorigin--tagsdevelseecho"你没有选择推送Git标签,即将结束..."gitpushorigindevfiexit1然后读写两个json文件运行节点命令commit.js//添加更新系统日志函数constreadline=require('readline');constrl=readline.createInterface({输入:process.stdin,输出:process.stdout});constpath=require("path");constfs=require('fs')varversionStr=""if(!process.argv[2]){process.exit()returnconsole.error('[包裹通知]版本信息未获取流,重写失败',err)}versionStr=process.argv[2]fs.readFile(path.join(__dirname,'./version_log.json'),(err,data)=>{if(err){process.exit()returnconsole.error("[Packagenotification]文件读取异常:"+err)}letpackagesConfig=JSON.parse(data)packagesConfig.push(JSON.parse(versionStr))fs.writeFile(路径.join(__dirname,'./version_log.json'),JSON.stringify(包sConfig,"","\t"),(err,result)=>{if(err){returnconsole.error('[打包通知]version_log.json重写失败',err)}process.exit()returnconsole.log('[Packagenotification]version_log.json版本更新成功')})})verison.jsconstpath=require("path");constfs=require('fs')fs.readFile(path.join(__dirname,'../package.json'),(readFilePackageError,packages)=>{if(readFilePackageError){process.exit()returnconsole.error("[Packagenotification]readpackage.jsonerror:"+readFilePackageError)}letnewVersionfs.readFile(path.join(__dirname,'./version_log.json'),(readFileLogError,logs)=>{if(readFileLogError){process.exit()returnconsole.error("[包通知]读取开发日志时出错:"+readFileLogError)}letlogData=JSON.parse(logs)newVersion=logData.pop().versionconsole.log('[打包通知]最新开发日志版本:V'+newVersion)letpackagesConfig=JSON.parse(packages)packagesConfig.version=newVersionfs.writeFile(path.join(__dirname,'../package.json'),JSON.stringify(packagesConfig,"","\t"),(err,result)=>{if(err){returnconsole.error('[PackageNotification]package.json重写失败',err)}process.exit()returnconsole.log('[打包通知]package.json版本更新成功')})})})原创内容,未经许可禁止转载!
