钉钉h5微应用缓存可行性解决方法

本文介绍了在开发钉钉H5微应用时遇到的缓存问题,通过在入口JS中添加版本号来避免缓存,并提供了一个自动更新版本号的Node.js脚本。然而,当结合 Jenkins 自动部署时,由于新版本号不会被推送到Git,导致方法无法在自动部署中生效,适合手动部署场景。
摘要由CSDN通过智能技术生成

最近有在开发钉钉h5微应用程序,坑爹的钉钉h5即使打包js做了hash串 每次打包上线依然会读取缓存。要手动清除掉手机里应用的缓存信息才可以读取最新的代码,这么做的话 用户体验着实太糟糕了。
百度了下说是在入口引用js后面加上版本号就能不读取缓存,ok 那想办法每次打包去更新版本号就好了。

要每次去更新版本号,那必然要用到node的fs模块来读写文件,开搞:
所有的环境变量文件里声明一个版本号
在这里插入图片描述

根目录新建一个js文件update.version.js
引入文件操作模块和路径模块以及获取当前版本号

const fs = require('fs');
const path = require('path');

const version = process.env.VUE_APP_VERSION;

声明一个函数

function changeVersion() {
	// 执行函数
}

判断当前环境是正式环境执行更新版本号操作

function changeVersion() {
	if (process.env.NODE_ENV === 'production') {
	    const _v = version.split('.').map(Number);
	    // 确定版本号
	    if (_v[2] < 10) {
	      _v[2]++;
	    } else {
	      if (_v[1] < 10) {
	        _v[1]++;
	        _v[2] = 0;
	      } else {
	        _v[0]++;
	        _v[1] = 0;
	        _v[2] = 0;
	      }
	    }
	    // 修改版本号
	    // 同步读文件
	    const file = fs.readFileSync(
	      path.join(__dirname, '.env.production'),
	      'utf-8'
	    );
	    // 需要更新的数据 由于本人reg实在是太差 正则写不来orz
	    const V = `VUE_APP_VERSION = ${_v.join('.')}`;
	    // 当前的数据
	    const nowV = `VUE_APP_VERSION = ${version}`;
	    // 替换数据 正则大佬可以直接在这里配置修改 不需要单独声明变量来替换
	    const result = file.replace(nowV, V);
	    // 同步写文件
	    fs.writeFileSync(path.join(__dirname, '.env.production'), result, 'utf-8');
	    return _v.join('.');
	 } else {
	 	return version
	 }
 }

别忘了把该函数导出

module.exports = changeVersion;

这样我们就做到了更新版本号文件的功能,接下来拿导出的版本号放到js文件路径上;
在vue.config.js文件上:

const changeVersion = require('./update.version');

const version = changeVersion();

module.exports里的chainWebpack配置项上添加config.output.filename

  chainWebpack: (config) => {
    // 是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。
    config.resolve.alias
      .set('@', resolve('src')) // key,value自行定义,比如.set('@@', resolve('src/components'))
      .set('_c', resolve('src/components'));
    config.plugin('html').tap((args) => {
      args[0].title = '';
      return args;
    });
    // 给js添加hash和版本号
    config.output.filename(`[name].[hash].js?version=${version}`).end();
  },

现在就可以每次打包先调用nodejs修改版本文件并获取最新的版本号添加到入口文件上;

完美解决


突然发现公司是jenkins自动部署的,自动部署 意味着每次都是拉git最新的代码来安装打包,打包后并不会把更新的版本号push到git去啊,那它下次还是读取的旧版本号啊喂,,,,

该方法貌似只适合手动部署!!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值