vue项目打包增加版本信息
目标
在Vue项目打包后的 dist/index.html
文件中写入本地打包的git信息。方便测试确定线上当前的版本信息。
实施步骤
提取git相关信息
在构建时需要获取git相关的信息,这些信息都需要使用git命令来获取。在node中,要执行一段命令行脚本需要使用child_process模块。
在项目build目录下新建 gitInfo.js 文件,文件内容如下:
const child_process = require('child_process')
const formatDate = function(date) {
function pad(value) {
return (value < 10 ? '0':'') + value
}
let year = date.getFullYear();
let month = pad(date.getMonth() + 1);
let day = pad(date.getDate());
let hour = pad(date.getHours());
let minutes = pad(date.getMinutes());
let seconds = pad(date.getSeconds());
return year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds
}
// git 最后一次提交的 Head
const commit = child_process.execSync('git show -s --format=%H').toString().trim()
const commitUserName = child_process.execSync('git show -s --format=%cn').toString().trim()
const commitUserMail = child_process.execSync('git show -s --format=%ce').toString().trim()
const commitDate = formatDate(new Date(child_process.execSync(`git show -s --format=%cd`).toString()))
const buildDate = formatDate(new Date())
const branch = child_process.execSync('git rev-parse --abbrev-ref HEAD').toString().replace(/\s+/, '')
module.exports = {commit, commitUserName, commitUserMail, commitDate, buildDate, branch}
配置 vue.config.js
在 vue.config.js 文件中引入 gitInfo.js 文件。
const gitInfo = require('./gitInfo.js')
chainWebpack: (config) => {
// ...
config.plugin('html').tap(args => {
args[0].gitInfo = gitInfo
return args
})
},
index.html添加信息
接着在 index.html 文件中添加版本信息
<meta name="author" content="<%= htmlWebpackPlugin.options.gitInfo.commitUserName %>">
<meta name="createdAt" content="<%= htmlWebpackPlugin.options.gitInfo.commitDate %>">
<meta name="generatedAt" content="<%= htmlWebpackPlugin.options.gitInfo.buildDate %>">
<meta name="version" content="<%= htmlWebpackPlugin.options.gitInfo.commit %>">
<meta name="branch" content="<%= htmlWebpackPlugin.options.gitInfo.branch %>">