思考
前端应用 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 版本更新胜利')
})
})
})
原创内容,未经容许禁止转载!