vue 部署上线清除浏览器缓存

vue 项目打包上线之后,每一次都会有浏览器缓存问题,需要手动的清除缓存。这样用户体验非常不好,所以我们在打包部署的时候需要尽量避免浏览器的缓存。下面是我的解决方案:

一、修改根目录index.html

在 head 里面添加下面代码

<meta http-equiv="pragram" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, no-store, must-revalidate">

这种会让所有的css/js资源重新加载

二、配置 nginx 不缓存 html

vue默认配置,打包后css和js的名字后面都加了哈希值,不会有缓存问题。但是index.html在服务器端可能是有缓存的,需要在服务器配置不让缓存index.html

server {
listen 80;
server_name yourdomain.com;
location / {
    try_files $uri $uri/ /index.html;
    root /yourdir/;
    index index.html index.htm;

    if ($request_filename ~* .*\.(?:htm|html)$)
    {
        add_header Cache-Control "no-cache, no-store";  //对html文件设置永远不缓存
    }  
  }
}

no-cache浏览器会缓存,但刷新页面或者重新打开时 会请求服务器,服务器可以响应304,如果文件有改动就会响应200
no-store浏览器不缓存,刷新页面需要重新下载页面

三、打包的文件路径添加时间戳

1、在 vue-cli2.x 创建的项目里,找到 build/webpack.prod.conf.js 文件

//定义一个变量获取当前时间戳
const version = new Date().getTime();
//output模块将时间戳加入到输出的文件名里
output: {
  publicPath: '/',
  path: config.build.assetsRoot,
  filename: utils.assetsPath(`js/[name].[chunkhash].${version}.js`),
  chunkFilename: utils.assetsPath(`js/[id].[chunkhash].${version}.js`)
},

//css文件名加时间戳
new ExtractTextPlugin({
    filename: utils.assetsPath(`css/[name].[contenthash].${version}.css`),
    allChunks: true,
}),

2、在 vue-cli3.x 创建的项目里,打开 vue.config.js 文件 ( 没有该文件自己在 src 同级目录下创建一个 )

const version = new Date().getTime();
module.exports = {
  	outputDir: 'dist', //打包的时候生成的一个文件名
	lintOnSave: false,
  	productionSourceMap: false,
  	css: {
	    loaderOptions: {
	      sass: {
	        data: `@import "@/components/themes/_handle.scss";`
	      }
	    },
	    // 是否使用css分离插件 ExtractTextPlugin
	    extract: {
	      // 修改打包后css文件名   // css打包文件,添加时间戳
	      filename: `css/[name].${version}.css`,   
	      chunkFilename: `css/[name].${version}.css`
	    }
	 },
  	configureWebpack: {
		output: { // 输出重构  打包编译后的 文件名称  【模块名称.版本号.时间戳】
		     filename: `js/[name].[chunkhash].${version}.js`,
		     chunkFilename: `js/[id].[chunkhash].${version}.js`
		}
	}
}

效果:
在这里插入图片描述

如有异议,欢迎留言讨论!!!

### 关于Vue项目中清除浏览器缓存的方法 在开发Vue应用程序时,遇到的一个常见问题是旧版本的JavaScript文件被浏览器缓存,这可能导致用户看到过期的内容。为了确保每次部署新版本时都能让用户的浏览器获取最新的资源,可以采取多种策略。 #### 使用哈希值作为文件名的一部分 一种有效的方式是在构建过程中给静态资源(如CSS、JS等)加上唯一的哈希值作为查询参数或文件名的一部分。当源码发生变化时,这些资源的名字也会随之改变,从而强制浏览器下载新的副本而是使用已有的缓存[^1]。 ```javascript // webpack.config.js 配置示例 module.exports = { output: { filename: 'bundle.[contenthash].js', // 将 hash 添加到 js 文件名中 }, }; ``` #### 设置HTTP头来控制缓存行为 通过配置服务器返回适当的Cache-Control HTTP响应头部信息,可以让客户端知道何时应该忽略本地缓存并请求最新版本的数据。对于生产环境下的重要脚本和样式表来说,通常建议设置较短的有效期限或者禁用缓存机制[^2]。 ```nginx location ~* \.(css|js)$ { add_header Cache-Control "no-store, no-cache, must-revalidate"; } ``` #### 利用Service Worker管理离线体验和服务端更新通知 如果应用已经实现了PWA特性,则可以通过编写自定义逻辑,在检测到有可用的新版本时提示用户刷新页面以获得改进后的功能[^3]。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值