Node获取当前git的提交信息并保存到json文件
核心
本次需求的核心是引入shellJs,通过shell.exec运行命令获取git信息,其他都是常规的json获取和文件保存,所以核心是以下代码
const shell = require('shelljs')
// 获取git分支名称
const branchs = shell.exec("git branch").trim().split('\n')
branchs.forEach(function (item) {
if (item.indexOf('*') > -1) {
versionObj.branch = item.replace('*', '').trim() // 获取当前激活的分支
}
})
完整代码
/**
* 版本更新信息对象
* status: 状态
* branch: 部署git分支
* lastCommitId:最后一次git提交记录ID
* lastCommitMessage: 最后一次git提交记录消息
* buildDate:打包时间
*/
var versionObj = {
status: "up",
branch: "",
lastCommitId: "",
lastCommitMessage: "",
buildDate: "",
};
const fs = require("fs");
const moment = require('moment')
const shell = require('shelljs')
// 获取git分支名称
const branchs = shell.exec("git branch").trim().split('\n')
branchs.forEach(function (item) {
if (item.indexOf('*') > -1) {
versionObj.branch = item.replace('*', '').trim() // 获取当前激活的分支
}
})
versionObj.buildDate = moment().format('yyyy-MM-DD HH:mm:ss')
versionObj.lastCommitId = shell.exec("git log -1 --pretty=format:'%H'").toString() // git上次提交的id
versionObj.lastCommitMessage = shell.exec("git log -1 --pretty=format:'%s'").toString() // git提交信息
function wirteFileByPath(path) {
fs.exists( path,function(exists){
if(exists){
writeJsonToFile(path)
}
else{
fs.mkdir(path, function (err) {
if (err) {
console.log('创建文件失败', err)
} else {
writeJsonToFile(path)
}
})
}
});
}
function writeJsonToFile(path) {
const objStr = JSON.stringify(versionObj, null, 2);
fs.writeFile(path + '/gitBranchData.json', objStr, function (err) {
if (err) {
console.log('写入失败', err)
}else {
console.log('写入成功')
}
})
}
module.exports = wirteFileByPath
总结
通过shell.exec运行命令,这里面存在着很大的想象空间,有很多shell相关的命令都可以通过代码来完成了,一个实际的应用是,在vue项目的package.json文件中,在npm run build命令后面的配置中加上命令运行node文件,以达到打包时顺带生成打包信息的文件的目的。
在大型网站中,有时候会出现这样一种情况,当新版本的网站发布后,因为浏览器的缓存还没更新,使用的还是旧版本的网页逻辑( js/html/css ),需要客户手动去强制刷新更新浏览器的缓存,而有了这个打包信息后,前端可以通过间隔时间获取打包信息,判断当前浏览器的代码是否是最新的代码,如果不是最新代码,则自动刷新,免去客户的手动刷新