vue2 自定义webpack plugin 添加版本文件到public目录下/vue-config全局环境变量

在项目根目录创建version-plugin.js文件

javascript 复制代码
// 引进node fs 模块
const fs = require('fs')

// 引进node path 模块
const path = require('path')

// webpack plugin
class VersionPlugin {

	// 实例化传的参数
  constructor (options = {}) {
    this.options = options
    this.isFinish = false
  }

	// plugin 勾子
  apply (compiler) {
  	// plugin 执行完成
    compiler.hooks.done.tap('VersionPlugin', () => {
    // 判断已经加载过结束
      if (this.isFinish) return false
		
		// 写入文件到public目录下
      fs.writeFileSync(path.join(__dirname, 'public', 'version.json'), JSON.stringify(this.options))
      this.isFinish = true
    })
  }
}

module.exports = VersionPlugin

vue-config.js文件

javascript 复制代码
const webpack = require('webpack')
const VersionPlugin = require('./version-plugin')
const now = Date.now()
module.exports = {
configureWebpack: {
		plugins: [
			// 实例自定义plugin 并传入时间缀
	      	new VersionPlugin({ version: now }),
			
			// 定义全局环境变量
	      	new webpack.DefinePlugin({
	        'process.env.VUE_APP_VERSION': now
      })]
	}
}

在router跳转前可以做其它操作

javascript 复制代码
import axios from 'axios'
// 在生产环境上
if (process.env.NODE_ENV === 'development') return false
// 通过axios 获取版本信息
const res = await axios.get(location.origin + '/version.json' + '?timeStamp=' + Date.now())

// 判断信息不同,操作其它逻辑
if (res.data.version !== process.env.VUE_APP_VERSION) {}
相关推荐
子兮曰2 小时前
把 649 种文件格式塞进一个网页里:一个「文件不出浏览器」的预览器
前端·javascript·后端
sm_926787055 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH6 小时前
HTML 的 <video> 元素
前端·html
溪语流沙6 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
逐光者9336 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC6 小时前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
CDwenhuohuo7 小时前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师7 小时前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划
Jmyd01237 小时前
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路
前端·3d·vr·三维数字化
刘天远8 小时前
Agent成本核算实现:事件表、状态分布与Python归集
前端·数据库·人工智能·python