vue项目如何实现版本控制,用以保证用户的浏览器资源为最新

问题描述:项目实际使用过程中,由于浏览器缓存问题,可能会导致使用的版本不是服务器上部署的最新版本,需要在项目中写入版本号

如何解决问题?

1. 在vue.config.js中,加上写入版本号逻辑

const fs = require('fs')
const path = require('path')

const resolve = dir => {
  return path.join(__dirname, dir)
}

const TimeStamp = new Date().getTime()

// 写入版本号
if(process.env.NODE_ENV === 'production'){
  process.env.VUE_APP_VERSION = TimeStamp;

  // 写入到.env文件中
  fs.writeFile(resolve('.env'), `VUE_APP_VERSION=${TimeStamp}`, err=>{
    if(err){
      return console.log(err)
    }
    console.log(`版本号变量写入成功:${TimeStamp}`)
  })

  // 写入到public的文件
  fs.writeFile(resolve('public/v.json'), JSON.stringify({version: TimeStamp}), err => {
    if(err){
      return console.log(err)
    }
    console.log(`版本号写入成功:${TimeStamp}`)
  })
}

2. 在router/index.js中加入判断版本号逻辑

router.beforeEach(async(to, from, next)=>{
  // 获取版本号
  let version = await http.get(`${location.origin}/v.json`).then(res => {
    return res.data.version
  })

  if(process.env.NODE_ENV === 'production' && process.env.VUE_APP_VERSION !== version){
    // 提示存在新版本
    MessageBox('系统版本有更新,可按【CTRL + F5】或【清除浏览器缓存】获取最新资源', '提示').then(_ => {
      window.location.reload()
    }).catch(_ => {})
    return;
  }
  // ......
})