Vue重新部署后刷新页面

需求:当我们的项目打包重新部署后,让用户在访问系统时,能够自动刷新,而不是需要用户手动刷新

思路:项目打包完成后,生成版本号(version.json),在用户进行路由的跳转时,对比当前版本号和localStorage存储的版本号,若不同,则将当前版本号存入localStorage,并强制页面刷新

实现步骤:

1.创建build-pro.js文件

写入代码:

console.log('build > 文件开始执行!')

const fs = require('fs')

const path = require('path')

function getRootPath(...dir) {

  return path.resolve(process.cwd(), ...dir)

}

const runBuild = async() => {

  try {

    const OUTPUT_DIR = 'dist'

    const VERSION = 'version.json'

    const versionJson = {

      version: 'V_' + Math.floor(Math.random() * 10000) + Date.now()

    }

    fs.writeFileSync(getRootPath(`${OUTPUT_DIR}/js/${VERSION}`), JSON.stringify(versionJson))

    console.log(`version file is build successfully!`)

  } catch (error) {

    console.error('version build error:\n' + error)

    process.exit(1)

  }

}

runBuild()

console.log('build > 文件执行结束!')

2.在package.json文件中,修改打包命令

3.在前置路由守卫中进行判断

async function checkAppNewVersion() {

  const url = `/js/version.json?t=${Date.now()}`

  let res = null

  try {

    res = await axios.get(url)

  } catch (err) {

    console.error('checkAppNewVersion error: ', err)

  }

  if (!res) return

  const version = res.data.version

  console.log(url)

  if (version && version !== localStorage.getItem('version')) {

    localStorage.setItem('version', version)

    console.log('更新')

    window.location.reload()

  } else {

    console.log('不更新')

  }

}

router.beforeEach(async(to, from, next) => {

// 除了跳转到'/'之外,都进行版本号对比

if (from.path !== '/') {

        checkAppNewVersion()

      }

}

 打包成功后的效果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值