uniapp打包H5的时候 清楚缓存(不安装依赖的前提下)

问题

在写项目的时候,打包好一个H5 发布成功,后来又重新打包新的包进行更新迭代,但是用户手机上还是上一个版本,本地缓存还是没有清除。

解决问题

步骤一:html不缓存

在html中,解决缓存的方法主要是依赖以下标签的属性:

html 复制代码
<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" />

这几个标签是什么意思呢:

js 复制代码
这几个标签的作用是禁用浏览器缓存,确保每次访问页面时都从服务器加载最新的内容。具体解释如下:

(1)<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />:
		这个标签设置了HTTP响应头中的Cache-Control属性,告诉浏览器不要缓存页面的任何部分,包括图片、脚本等。同时,要求浏览器在每次请求时都必须向服务器验证资源的新鲜度。
(2)<meta http-equiv="Pragma" content="no-cache" />:
		这个标签设置了HTTP响应头中的Pragma属性,它与Cache-Control类似,但主要用于HTTP/1.0协议。同样表示不缓存页面的任何部分。
(3)<meta http-equiv="Expires" content="0" />:
		这个标签设置了HTTP响应头中的Expires属性,它指定了页面的过期时间。设置为0表示页面立即过期,即每次都需要重新从服务器获取。

综合这三个标签,可以确保浏览器不会缓存页面的任何内容,从而确保用户总是看到最新的页面内容。

所以要保证打包时候生成的html具备这几个标签,就能保证用户每次请求的都是服务器是上最新版本的html文件

uniapp官方提供了一个东西叫做:index.html模板

就在manifest.json =>> web配置 =>> index.html模板路径:

在manifest.json同级目录下创建一个名为 :template.h5.html 的文件

文件内容如下所示:

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <!-- 由于自定义了meta标签想要实现自动化打包添加该标签,需要添加自定义html模板 -->
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <!-- 这个标签设置了HTTP响应头中的Cache-Control属性,告诉浏览器不要缓存页面的任何部分,包括图片、脚本等。同时,要求浏览器在每次请求时都必须向服务器验证资源的新鲜度。 -->
        <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
		<!-- 这个标签设置了HTTP响应头中的Pragma属性,它与Cache-Control类似,但主要用于HTTP/1.0协议。同样表示不缓存页面的任何部分。 -->
        <meta http-equiv="Pragma" content="no-cache" />
		<!-- 这个标签设置了HTTP响应头中的Expires属性,它指定了页面的过期时间。设置为0表示页面立即过期,即每次都需要重新从服务器获取。 -->
        <meta http-equiv="Expires" content="0" />
        <title>
            <%= htmlWebpackPlugin.options.title %>
        </title>
        <script>
            var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
            document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
        </script>
        <link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
    </head>
    <body>
        <!-- <noscript>
            <strong>Please enable JavaScript to continue.</strong>
        </noscript> -->
        <div id="app"></div>
        <!-- built files will be auto injected -->
    </body>
</html>

打包以后的index.html文件如下所示:已经包含了刚刚说的三行代码

步骤二:js不缓存

步骤一是解决了html不缓存的问题,但是解决不了js缓存的问题,就需要使用vue的打包机制来解决问题了。

vue.config.js文件是Vue项目的配置文件,用于自定义项目的配置选项。在这个文件中,你可以设置各种与构建、开发和部署相关的配置项,例如:

(1)修改webpack配置:可以对webpack进行个性化配置,如修改入口文件、输出目录、插件等。
	(2)开发服务器配置:可以配置开发服务器的端口号、代理设置等。
	(3)生产环境优化:可以开启代码压缩、分割等优化选项。
	(4)单元测试配置:可以配置单元测试工具(如Jest)的相关选项。
	(5)集成第三方库或插件:可以添加一些第三方库或插件的配置信息。
总之,vue.config.js文件可以让你更灵活地控制Vue项目的构建和运行过程。

所以,再项目的根目录下面创建一个vue.config.js文件:具体代码如下:

js 复制代码
let filePath = '';   // 默认文件路径
let TimeStamp = '';  // 时间戳
let Version = '-V1.0.0-'; // 版本号
//编译环境判断,可以根据不同环境来做相应的配置
if (process.env.UNI_PLATFORM === 'h5') {
  filePath = 'static/js/'
  TimeStamp = new Date().getTime();
  process.env.VUE_APP_INDEX_CSS_HASH=`${Version}${TimeStamp}`   //给css文件也使用该时间戳
}
 
module.exports = {
  configureWebpack: {
    output: { //重构文件名
      filename: `${filePath}[name].${Version}${TimeStamp}.js`, // index文件重命名为带有版本号+时间戳的格式
      chunkFilename: `${filePath}[name].${Version}${TimeStamp}.js` // static/js/pages-home-index.-V1-754654657.js  
    },
  },
}

这样配置保证每次打包后的js文件名和之前的文件名字都不一样,此时找不到文件名就会到服务器请求最新的文件,即可每次不会使用缓存文件

相关推荐
耶啵奶膘2 小时前
uniapp-是否删除
linux·前端·uni-app
断墨先生8 小时前
uniapp—android原生插件开发(3Android真机调试)
android·uni-app
guai_guai_guai10 小时前
uniapp
前端·javascript·vue.js·uni-app
材料苦逼不会梦到计算机白富美13 小时前
golang分布式缓存项目 Day 1
分布式·缓存·golang
Java 第一深情13 小时前
高性能分布式缓存Redis-数据管理与性能提升之道
redis·分布式·缓存
HBryce2414 小时前
缓存-基础概念
java·缓存
阿伟来咯~15 小时前
一些 uniapp相关bug
uni-app·bug
瑶琴AI前端19 小时前
uniapp组件实现省市区三级联动选择
java·前端·uni-app
mosen86819 小时前
Uniapp去除顶部导航栏-小程序、H5、APP适用
vue.js·微信小程序·小程序·uni-app·uniapp
想要打 Acm 的小周同学呀21 小时前
LRU缓存算法
java·算法·缓存