Vue/cli2 || /cli3部署上线清理浏览器缓存

本文主要是介绍Vue/cli2 || /cli3部署上线清理浏览器缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述:项目(vue /cli2 || vue /cli3) 部署上线用浏览器打开后依旧是上一个版本

问题原因:浏览器的缓存机制(分为强缓存和协商缓存)
强缓存:不在客户端存储资源,始终去原始服务器获取资源
协商缓存:向后端发起请求,看服务器资源是否更新,如果没有更新就返回304,如果更新了就返回200
no-cacheno-store 都是 HTTP 协议头 Cache-Control 的值。区别是:
no-store
彻底禁用缓存,所有内容都不会被缓存到缓存或临时文件中。
no-cache
可以在客户端存储资源,每次都必须去服务端做新鲜度校验,来决定从服务端获取新的资源(200)还是使用客户端缓存(304)。也就是所谓的协商缓存
除了 no-cacheno-storeCache-Control 头的取值还有:
public
所有内容都将被缓存(客户端和代理服务器都可缓存)
private
内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)
max-age=xxx
缓存的内容将在 xxx 秒后失效,这个选项只在 HTTP1.1 可用,并如果和 Last-Modified 一起使用时,优先级较高。

一、修改根目录index.html,添加以下代码

于 HEAD 标签内直接添加 META 标签:
1.)本人所在项目采用得这个

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

2.)如果不想彻底禁止缓存可以采用下面的

<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />

二、nginx设置不缓存 html

(nginx设置后,每次刷新页面加载时间太长,所以我所在项目未使用)
1.)在nginx.conf文件做设置:增加add_header Cache-Control "no-cache, no-store

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

2.)或者直接在 location / 这里增加add_header Cache-Control "no-cache, no-store

server {location / {root   /usr/webkit/dist;index  index.html index.htm;add_header Cache-Control "no-cache, no-store";}
}

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

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

//获取当前时间戳
const version = new Date().getTime();
//将时间戳加入output中
output: {...config.output,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 文件

const version = new Date().getTime();
module.exports = {configureWebpack: {output: { filename: `js/[name].[chunkhash].${version}.js`,chunkFilename: `js/[id].[chunkhash].${version}.js`}}
}

或者

const version = new Date().getTime();
module.exports = {configureWebpack: config =>{	if(process.env.NODE_ENV === "production"){Object.assign(config,{output: { ...config.output,filename: `static/js/[name].[chunkhash].${version}.js`,chunkFilename: `static/js/[name].[chunkhash].${version}.js`}})}}
}

四、location.reload() 重新加载当前文档

(这是同事提供的方法,本人未使用,但是有采取性)
  如果index.html 设置了不允许缓存,每次刷新时,就会重新加载资源,可能会造成响应过慢的现象。所以引入了一种新的方案:
  1.)在package.json文件每次打包时改变一下version;
  2.)在main.js文件中,加入如下代码:

const VUE_VERSION = require('../package.json').version
const V_VER = window.localStorage.getItem("vueVersion");
if(VUE_VERSION != V_VER){localStorage.clear()window.localStorage.setItem("vueVersion", VUE_VERSION );location.reload()
}

五、HTML中的Meta标签
根据HTML语言标准注释:meta标签是对网站发展非常重要的标签,它可以用于鉴别作者,设定页面格式,标注内容提要和关键字,以及刷新页面等等。

HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容。

1.expires(期限)
说明:可以用于设定网页的到期时间。一旦网页过期,必须到服务器上重新调阅。
用法:

`<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">`

注意:必须使用GMT的时间格式。

2.Pragma(cach模式)
说明:禁止浏览器从本地机的缓存中调阅页面内容。
用法:

`<META HTTP-EQUIV="Pragma" CONTENT="no-cache">` 

注意:这样设定,访问者将无法脱机浏览。

3.Refresh(刷新)
说明:需要定时让网页自动链接到其它网页的话,就用这句了。
用法:

`<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.baidu.com">`

注意:其中CONTENT="5;URL=http://www.baidu.com"的5是指停留5秒钟后自动刷新到URL网址。

下面标签作用是20秒自动刷新当前页面:

<meta http-equiv="refresh" content="20" />

4.Set-Cookie(cookie设定)
说明:如果网页过期,那么存盘的cookie将被删除。
用法:

<META HTTP-EQUIV="Set-Cookie" CONTENT="cookievalue=xxx;
expires=Wednesday, 21-Oct-98 16:14:21 GMT; path=/"> 

注意:必须使用GMT的时间格式。

这篇关于Vue/cli2 || /cli3部署上线清理浏览器缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/606970

相关文章

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

前端CSS Grid 布局示例详解

《前端CSSGrid布局示例详解》CSSGrid是一种二维布局系统,可以同时控制行和列,相比Flex(一维布局),更适合用在整体页面布局或复杂模块结构中,:本文主要介绍前端CSSGri... 目录css Grid 布局详解(通俗易懂版)一、概述二、基础概念三、创建 Grid 容器四、定义网格行和列五、设置行

前端下载文件时如何后端返回的文件流一些常见方法

《前端下载文件时如何后端返回的文件流一些常见方法》:本文主要介绍前端下载文件时如何后端返回的文件流一些常见方法,包括使用Blob和URL.createObjectURL创建下载链接,以及处理带有C... 目录1. 使用 Blob 和 URL.createObjectURL 创建下载链接例子:使用 Blob

Vuex Actions多参数传递的解决方案

《VuexActions多参数传递的解决方案》在Vuex中,actions的设计默认只支持单个参数传递,这有时会限制我们的使用场景,下面我将详细介绍几种处理多参数传递的解决方案,从基础到高级,... 目录一、对象封装法(推荐)二、参数解构法三、柯里化函数法四、Payload 工厂函数五、TypeScript