Vue 打包上线后的缓存问题解决

 更新时间:2023年11月29日 16:53:38   作者:乐辞  
在使用vue脚手架搭建前端工程时,经常会遇到打包上线后的缓存问题,许多开发者会直接在index.html中加入类似以下代码来解决缓存问题,本文通过实例代码给大家介绍的非常详细,需要的朋友参考下吧

问题描述

在使用vue脚手架搭建前端工程时,经常会遇到打包上线后的缓存问题。具体表现为,当程序版本升级时,用户仍然访问到旧版本的页面。许多开发者会直接在index.html中加入类似以下代码来解决缓存问题:

<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">

这种方法虽然解决了缓存问题,但却导致用户每次访问程序都需要重新请求服务器,无法利用静态资源的缓存,从而增加了流量消耗和网络压力。

需求澄清

实际上,我们需要解决的问题并不是简单地要缓存或不要缓存,而是希望根据情况灵活控制

  • 每次程序升级后,用户不会因为缓存问题而访问到旧版本的程序。
  • 如果程序没有升级,用户可以利用静态资源的缓存,减少对服务器的请求。

解决原理

在vue脚手架的每次打包过程中,会给生成的静态资源文件名添加哈希后缀,并 index.html中引入带有相应哈希后缀的静态资源文件。因此,每个版本的静态资源都是被正确引入的,不会因升级而出现缓存问题。因此,我们只需让index.html不被缓存,而让其他静态资源可以被缓存,即可满足需求。

然而,要实现让静态资源被缓存,但让index.html不被缓存,则需要借助服务器配置,通过设置针对index.html请求的header来控制缓存。

具体实现

Nginx服务器配置

如果你使用Nginx服务器,你可以简单地添加以下配置:

location = /index.html {
 add_header Cache-Control "no-cache, no-store";
}

Apache服务器配置

如果你使用Apache服务器,你可以在VirtualHost中增加以下配置:

<Files "index.html">  
    Header set Cache-Control "no-cache, no-store"  
 </Files>

修改webpack的配置文件

同时,你也可以通过修改webpack的配置文件来实现对静态资源文件名的哈希处理,以确保静态资源能够被有效缓存:

 onst Timestamp = new Date().getTime();
 // Vue.config.js 配置选项
module.exports = {
	configureWebpack: { // webpack 配置
        output: { // 输出重构  打包编译后的 文件名称:【模块名称.contenthash】使用contenthash保证了文件被修改才会重新生成新的文件名,让用户能有效使用浏览器缓存,减轻服务器压力
            filename: `static/js/[name].[contenthash:8].js`,
            chunkFilename: `static/js/[name].[contenthash:8].js`
        },
    }
}

通过以上步骤,你可以灵活地控制缓存,让用户在程序升级后访问到最新版本的页面,同时减少了静态资源的重复请求,优化了用户体验和网络流量消耗。

到此这篇关于Vue 打包上线后的缓存问题的文章就介绍到这了,更多相关vue打包上线缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue父组件如何获取子组件的值

    vue父组件如何获取子组件的值

    这篇文章主要介绍了vue父组件如何获取子组件的值,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Mixin混入分发Vue组件可复用功能基础示例

    Mixin混入分发Vue组件可复用功能基础示例

    这篇文章主要为大家介绍了Mixin混入分发Vue组件可复用功能基础示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • vue运行环境搭建全过程

    vue运行环境搭建全过程

    这篇文章主要介绍了vue运行环境搭建全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 学习vue.js表单控件绑定操作

    学习vue.js表单控件绑定操作

    这篇文章主要和大家一起学习vue.js表单控件绑定操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Vue3组件间的通信方式详解

    Vue3组件间的通信方式详解

    这篇文章主要介绍了Vue3组件间的通信方式,在使用vue时,我们经常会把不同的模块拆分成不同的组件,而组件之间有的需要传递数据,所以组件间的数据通信就非常重要了
    2023-04-04
  • Vue使用<Suspense/>实现图片加载组件

    Vue使用<Suspense/>实现图片加载组件

    Suspense是Vue的内置组件,用于管理异步组件的加载状态,包括等待、出错和最终渲染,它通过两个插槽(default和fallback)来实现这一功能,感兴趣的可以了解一下
    2026-01-01
  • 详解如何在Vue项目中发送jsonp请求

    详解如何在Vue项目中发送jsonp请求

    这篇文章主要介绍了详解如何在Vue项目中发送jsonp请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • ruoyi-cloud通过bootstrap.yml文件设置多环境配置

    ruoyi-cloud通过bootstrap.yml文件设置多环境配置

    本文主要介绍了在ruoyi-cloud框架中通过bootstrap.yml及对应环境配置文件实现多环境部署的方法,具有一定的参考价值,感兴趣的可以了解一下
    2025-09-09
  • jQuery与Vue深度对比(建议收藏!)

    jQuery与Vue深度对比(建议收藏!)

    Vue.js和jQuery 都是用于前端开发的 JavaScript 库,但它们在设计理念、用途和功能上有显著的差异,这篇文章主要介绍了jQuery与Vue深度对比的相关资料,需要的朋友可以参考下
    2025-12-12
  • 如何封装axios form-data针对统一的formData入参方式

    如何封装axios form-data针对统一的formData入参方式

    这篇文章主要介绍了如何封装axios form-data针对统一的formData入参方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论