vue项目版本更新后文件存在缓存问题解决方案(vue-cli2.0&vue-cli3.0)

一、vue2

1.配置webpack.prod.conf.js 

1

2

3

4

5

6

//设置output加t=[chunkhash:8]相当于加时间戳,用于清缓存

output: {

    path: config.build.assetsRoot,

    filename: utils.assetsPath('js/[name].[chunkhash].js?t=[chunkhash:8]'),

    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js?t=[chunkhash:8]')

  },

2.在static静态目录下新建version.json每次发版更改里面的版本号 

1

2

3

{

    "version""0.0.1"

}

3.在src中新建 libs/versionUpdate.js文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import axios from 'axios'

const isNewVersion = () => {

  let url = `//${window.location.host}/static/version.json?t=${new Date().getTime()}`;

  axios.get(url).then(res => {

    if (res.status === 200) {

      let vueVersion = res.data.version;

      let localVueVersion = localStorage.getItem('vueVersion');

      if (localVueVersion && localVueVersion != vueVersion) {

        localStorage.setItem('vueVersion', vueVersion);

        window.location.reload();

        return;

      else {

        localStorage.setItem('vueVersion', vueVersion);

      }

    }

  });

}

export default {

  isNewVersion

}

4.全局路由拦截中写,只要每次版本号不同就重新加载页面配合第一步就可以清楚浏览器缓存

1

2

3

4

5

import versionTood from '@/libs/versionUpdate'

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

  //判断当前代码版本是否与服务器中代码版本一致,如不一致则刷新页面获取最新

  versionTood.isNewVersion();

  

二、vue3

1.在vue.config.js中配置output

1

2

3

4

5

6

7

8

const Timestamp = new Date().getTime();

  

configureWebpack: {

    output: {

      filename: `js/[name].${Timestamp}.js`, // 每次构建打包时给文件名加上时间戳,确保每次版本更新的文件名不一样

      chunkFilename: `js/[name].${Timestamp}.js`

    }

}

2.在public目录下新建version.json每次发版更改里面的版本号

1

2

3

{

    "version""0.0.1"

}

3.在src中新建 libs/versionUpdate.js文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import axios from 'axios'

const isNewVersion = () => {

  let url = `//${window.location.host}/static/version.json?t=${new Date().getTime()}`;

  axios.get(url).then(res => {

    if (res.status === 200) {

      let vueVersion = res.data.version;

      let localVueVersion = localStorage.getItem('vueVersion');

      if (localVueVersion && localVueVersion != vueVersion) {

        localStorage.setItem('vueVersion', vueVersion);

        window.location.reload();

        return;

      else {

        localStorage.setItem('vueVersion', vueVersion);

      }

    }

  });

}

export default {

  isNewVersion

}

4.全局路由拦截中写,只要每次版本号不同就重新加载页面配合第一步就可以清楚浏览器缓存

1

2

3

4

5

import versionTood from '@/libs/versionUpdate'

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

  //判断当前代码版本是否与服务器中代码版本一致,如不一致则刷新页面获取最新

  versionTood.isNewVersion();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值