vue项目版本更新后文件存在缓存问题解决方案

1.在vue.config.js中配置output,打包后的文件会带时间戳

const Timestamp = new Date().getTime();
module.exports = {
    // 每次构建打包时给文件名加上时间戳,确保每次版本更新的文件名不一样
    configureWebpack: {
        output: {
            filename: `js/[name].${Timestamp}.js`, 
            chunkFilename: `js/[name].${Timestamp}.js`
        }
    }
}   

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

{
    "version": "1.0.8"
}

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

import axios from 'axios'
const isNewVersion = () => {
    let url = `../../json/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.全局路由拦截中写,只要每次版本号不同就重新加载页面配合第一步就可以清楚浏览器缓存

import versionTood from '@/api/versionUpdate';
router.beforeEach(async(to, from, next) => {
    //判断当前代码版本是否与服务器中代码版本一致,如不一致则刷新页面获取最新
    versionTood.isNewVersion();
})

参考来源:http://t.zoukankan.com/konglingxi-p-14348940.html

Vue项目发布新版本时,浏览器可能会缓存旧的静态资源(如JS、CSS文件),导致用户无法立即看到最新的更改。为了解决这个问题,可以采取以下几种方法: 1. **使用版本号或哈希值**: 在构建项目时,给静态资源文件名添加版本号或哈希值。这样每次发布新版本时,文件名都会发生变化,浏览器会认为这是一个新的资源,从而重新加载。 ```javascript // vue.config.js module.exports = { filenameHashing: true } ``` 2. **配置服务器缓存策略**: 在服务器端配置缓存策略,确保静态资源在发布新版本时能够及时更新。例如,在Nginx中,可以设置缓存时间,或者使用`Cache-Control`头。 ```nginx location /static/ { add_header Cache-Control "no-store"; } ``` 3. **使用CDN**: 将静态资源托管到CDN上,并配置CDN的缓存策略。CDN通常会提供缓存刷新功能,可以在发布新版本时手动刷新缓存。 4. **在HTML中引入版本号**: 在`index.html`中引入静态资源时,手动添加版本号或哈希值。 ```html <script src="/js/app.js?v=1.0.0"></script> ``` 5. **使用`Service Worker`**: 利用`Service Worker`缓存机制,手动控制缓存更新。 ```javascript // sw.js self.addEventListener('install', function(event) { event.waitUntil( caches.open('v2').then(function(cache) { return cache.addAll([ '/js/app.js', '/css/styles.css', '/index.html' ]); }) ); }); self.addEventListener('fetch', function(event) { event.respondWith( caches.match(event.request).then(function(response) { return response || fetch(event.request); }) ); }); ``` 通过以上方法,可以有效解决Vue项目发布新版本时的缓存问题,确保用户能够及时看到最新的更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值