vue通过webPack在打包时自动更新版本号,获取git commitId 等信息

1. 首先需要在命令行中安装我们需要的依赖包

npm install --save-dev git-revision-webpack-plugin

2.一般在安装好之后就可以正常使用了,但是有时候需要我们在安装一下,所以我们最好在执行以下:

npm install

3.安装好依赖包之后,我们就可以正常使用了,我们在vue.config.js文件中写入以下代码:

const path = require('path')  
const Timestamp = new Date().getTime()
//使用刚才安装的依赖包
const {GitRevisionPlugin} = require('git-revision-webpack-plugin') 
//使用git信息
const gitRevisionPlugin = new GitRevisionPlugin();
//获取commitId
const commitId = gitRevisionPlugin.commithash()
//获取branch信息
const branch = gitRevisionPlugin.branch()
var fs = require('fs')
const chalk = require('chalk')
// const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV)
//每次打包构建代码,自动更新版本号,同一天加1,隔天自动回归变成 1 。例如{ 今天:1.20200917.3,第二天:1.20200918.1 }
try {
  function AddZero(time){
    if(time<10){
      return "0"+time
    }else{
      return time
    }
  }
  //指出我们要将信息写入到哪里
  let packageTxt=fs.readFileSync('./package.json','utf8');
  let versionData = packageTxt.split('\n');
  let packageJson = JSON.parse(packageTxt);
  let VersionArr = packageJson.version.split('.');
  let date = new Date();
  let today = date.getFullYear()+""+AddZero((date.getMonth()+1))+""+AddZero(date.getDate())
  if(today == VersionArr[1]){
    VersionArr[2] = parseInt(VersionArr[2])+1
  }else{
    VersionArr[1] = date.getFullYear()+""+AddZero((date.getMonth()+1))+""+AddZero(date.getDate())
    VersionArr[2] = 1;
  }
  let versionLine = VersionArr.join('.');
  for(let i= 0; i<versionData.length;i++){
    if(versionData[i].indexOf('"version":')!=-1){
      versionData.splice(i,1,'  "version": "'+versionLine+'",');
      break;
    }
  }
  for(let i= 0; i<versionData.length;i++){
    if(versionData[i].indexOf('"buildTime":')!=-1){
      versionData.splice(i,1,'  "buildTime": "'+date+'",');
      break;
    }
  }
  for(let i= 0; i<versionData.length;i++){
    if(versionData[i].indexOf('"commitId":')!=-1){
      versionData.splice(i,1,'  "commitId": "'+commitId+'",');
      break;
    }
  }
  for(let i= 0; i<versionData.length;i++){
    if(versionData[i].indexOf('"branch":')!=-1){
      versionData.splice(i,1,'  "branch": "'+branch+'",');
      break;
    }
  }
  // versionData.splice(i,1,'  "buildTime": "'+versionLine+'",');
  fs.writeFileSync('./package.json',versionData.join('\n'),'utf8');
  console.log(chalk.green.bold('更新版本号成功!当前最新版本号为:'+versionLine));
} catch(e) {
  console.log(chalk.red.bold('读取文件修改版本号出错:',e.toString()));
}

4.上边我们将一些信息需要写入到package.json中,所以我们就需要在pageage.json中提前初始化字段:

{
   "name": "k12PlatformWeb",
  "version": "0.20210104.8",
  "private": true,
  "buildTime": "Mon Jan 04 2021 11:02:00 GMT+0800 (中国标准时间)",
  "packageName": "k12PlatformWeb",
  "commitId": "2431f010a3b7ed6037b6345efd3f9201a7e8433c",
  "branch": "master",
}    

5.这样我们在使用 npm run build 时就会自动更新这些字段的信息

6.如果我们要网页的其他地方使用pageage.json中的信息,那我们就要在相应的界面这样编写:

const pageageInfo = require('././pageage.json')
var v = pageageInfo.verdion
//这样就获取到了pageage.json中version中的信息

7.上边的问题其实有一个不妥之处,那就是这个pageage.json文件在使用npm run build 时会被打包,所有在打包文件中就看不到了,所有这个问题还有待于解决?或者你有好的办法欢迎指导!!!

posted @ 2021-01-05 17:11  杨超(yc)  阅读(752)  评论(0编辑  收藏  举报