Vue项目自动设置版本号,版本号变更清空缓存

需求

项目中在cookie和localStorage中,存储了不少信息,希望每次发布后能清空cookie和localStorage,避免缓存和版本不一致带来的影响。

方式一

  1. 自定义webpack的plugin,在afterPlugins钩子函数中修改package.json文件版本号,使用当前时间作为版本号
  2. 在main.js中读取package.json文件,判断当前版本号是否和localStorage中的版本号是否一致。若不一致,清空localStorage
  3. 将当前版本号存入localStorage

vue.consig.js中定义插件

chainWebpack: config => {
  const VersionPlugin = require('./src/versionPlugin')
  config.plugin('version').use(VersionPlugin).tap(args => {
    return args
  })
}

versionPlugin读取package.json修改版本号

const fs = require('fs')
const path = require('path')
const sep = path.sep

function VersionPlugin (options) {
  this.options = options || {}
}

VersionPlugin.prototype.apply = function (compiler) {
  var self = this
  compiler.plugin('afterPlugins', function (params) {
    const packageJsonPath = path.join(params.context, sep + 'package.json')
    const dateStr = getDateStr()
    let packageJsonStr = fs.readFileSync(packageJsonPath, 'utf8')
    const r = new RegExp('(?<=version\\":\\s*\\")(.*)(?=")')
    packageJsonStr = packageJsonStr.replace(r, "1.0." + dateStr)
    fs.writeFileSync(packageJsonPath, packageJsonStr, 'utf8')
  })
}
function getDateStr () {
  const now = new Date()
  return now.getFullYear() + format(now.getMonth() + 1) + format(now.getDate()) + format(now.getHours()) + format(now.getMinutes())
  function format (num) {
    return num < 10 ? '0' + num : '' + num
  }
}

module.exports = VersionPlugin

main.js中读取package.json判断版本号是否一致

import packageJson from '../package.json'
import cookie from './util/cookie'

const version = packageJson.version
const localVersion = localStorage.getItem('projectVersion')
if (!localVersion || version !== localVersion) {
  localStorage.clear()
  cookie.remove('jwt')
  localStorage.setItem('projectVersion', version)
}

方式二

使用webpack.DefinePlugin插件将参数传入全局环境变量process.env,vue已默认集成DefinePlugin插件

  1. 配置webpack.DefinePlugin插件,使用当前时间作为版本号,传入process.env
  2. 在main.js中读取全局变量process.env,判断当前版本号是否和localStorage中的版本号是否一致。若不一致,清空localStorage
  3. 将当前版本号存入localStorage

vue.consig.js中使用DefinePlugin插件,vuecli3中已默认集成此插件,config.plugin('define')来使用此使用

chainWebpack: config => {
  // 使用webpack.DefinePlugin
  config.plugin('define').tap(args => {
    args[0]['process.env'].VERSION = (function () {
      const now = new Date()
      return now.getFullYear() + format(now.getMonth() + 1) + format(now.getDate()) + format(now.getHours()) + format(now.getMinutes())
      function format (num) {
        return num < 10 ? '0' + num : '' + num
      }
    })()
    return args
  })
}

main.js中读取全局变量process.env判断版本号是否一致

import cookie from './util/cookie'

const version = process.env.VERSION
const localVersion = localStorage.getItem('projectVersion')
if (!localVersion || version !== localVersion) {
  localStorage.clear()
  cookie.remove('jwt')
  localStorage.setItem('projectVersion', version)
}

结语

方式一需要新增自定义插件;方式二使用现成的插件,使用较为方便,通过webpack.DefinePlugin也可以给全局变量process.env定义其他参数

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值