在项目中调用版本号和git信息
Vue Cli 3
第一步:创建 /vue.config.js,内容如下:
const packageInfo = require('./package.json');
const fs = require('fs');
const gitHEAD = fs.readFileSync('.git/HEAD', 'utf-8').trim(); // ref: refs/heads/feature/xxx
const ref = gitHEAD.split(': ')[1]; // refs/heads/feature/xxx
const branch = gitHEAD.split('/').slice(2).join('/'); // feature/xxx
const commitId = fs.readFileSync('.git/' + ref, 'utf-8').trim().substr(0, 7);
const buildDate = new Date().toISOString(); // "2019-03-02T02:16:34.149Z"
module.exports = {
chainWebpack: config => {
config.plugin('html').tap(args => {
args[0].AppInfo = {
name: packageInfo.name,
version: packageInfo.version,
branch,
commitId,
budilDate
};
return args;
});
}
};
第二步:编辑 /public/index.html,在需要放置版本信息的地方参照以下方式编写(文末有完整版index.html):
<div>版本号:<%=htmlWebpackPlugin.options.AppInfo.version%></div>
或:
<script>
try {
var AppInfo = JSON.parse('<%=JSON.stringify(htmlWebpackPlugin.options.AppInfo)%>');
console.group('Project Info:');
console.log('%c' +
' Name: ' + AppInfo.name + '\n' +
' Version: ' + AppInfo.version + '\n' +
' Branch: ' + AppInfo.branch + '\n' +
'CommitId: ' + AppInfo.commitId + '\n' +
' Build: ' + new Date(AppInfo.buildDate).toLocaleString(),
'color:#C00'
);
console.groupEnd();
} catch(e) {}
</script>
第三步:重新运行 yarn server 查看效果。
Vue Cli 2
第一步:编辑 /config/prod.env.js 修改为:
'use strict';
const packageInfo = require('../package.json');
const fs = require('fs');
const gitHEAD = fs.readFileSync('.git/HEAD', 'utf-8').trim();
const ref = gitHEAD.split(': ')[1];
const branch = gitHEAD.split('/').slice(2).join('/');
const commitId = fs.readFileSync('.git/' + ref, 'utf-8').trim();
const buildDate = new Date().toISOString();
module.exports = {
APP_INFO: JSON.stringify({
name: packageInfo.name,
version: packageInfo.version,
branch,
commitId,
buildDate
}),
NODE_ENV: '"production"'
};
dev.env.js 会在 prod.env.js 的基础上修改所以不用管 dev.env.js
第二步:编辑 /build/webpack.prod.conf.js 和 /build/webpack.dev.conf.js 参照以下代码修改:
// build/webpack.prod.conf.js
// ...
plugins: [
// ...
new HtmlWebpackPlugin({
appinfo: JSON.parse(env.APP_INFO), // 添加这行
filename: process.env.NODE_ENV === 'testing' ? 'index.html' : config.build.index,
template: 'index.html',
favicon: 'static/favicon.ico',
inject: true,
// ...
}),
// ...
]
// ...
// build/webpack.dev.conf.js
const env = require('../config/dev.env'); // 添加这行(另有一行代码也引了这个文件,那行可以用 env 变量代替掉 require)
plugins: [
// ...
new HtmlWebpackPlugin({
appinfo: JSON.parse(env.APP_INFO), // 添加这行
filename: 'index.html',
template: 'index.html',
favicon: 'static/favicon.ico',
inject: true
}),
// ...
]
// ...
第三步:编辑 /index.html,在需要放置版本信息的地方参照以下方式编写(文末有完整版index.html):
<div>版本号:<%=htmlWebpackPlugin.options.appinfo.version%></div>
或:
<script>
try {
var appinfo = JSON.parse('<%=JSON.stringify(htmlWebpackPlugin.options.appinfo)%>');
console.group('Project Info:');
console.log('%c' +
' Name: ' + appinfo.name + '\n' +
' Version: ' + appinfo.version + '\n' +
' Branch: ' + appinfo.branch + '\n' +
'CommitId: ' + appinfo.commitId + '\n' +
' Build: ' + new Date(appinfo.buildDate).toLocaleString(),
'color:#C00'
);
console.groupEnd();
} catch(e) {}
</script>
第四步:重新运行 npm start 查看效果。
在项目里使用
1.在入口 index.html 使用:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<script>
try {
var appinfo = JSON.parse('<%=JSON.stringify(htmlWebpackPlugin.options.appinfo)%>');
console.group('Project Info:');
console.log('%c' +
' Name: ' + appinfo.name + '\n' +
' Version: ' + appinfo.version + '\n' +
' Branch: ' + appinfo.branch + '\n' +
'CommitId: ' + appinfo.commitId + '\n' +
' Build: ' + new Date(appinfo.buildDate).toLocaleString(),
'color:#C00'
);
console.groupEnd();
} catch(e) {}
</script>
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
2.在 vue 文件里使用:
<template />
<script>
export default {
methods: {
showAbout() {
let self = this;
let content = `Ver${process.env.AppInfo.version}`; // 直接用
content += ' Build ' + new Date().getTime();
self.$vux.alert.show({
title: '关于',
content
});
}
}
};
</script>
<style lang="stylus" scoped />

