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) {}
相关推荐
TE-茶叶蛋13 分钟前
Flutter、Vue 3 和 React 在 UI 布局比较
vue.js·flutter·react.js
遇到困难睡大觉哈哈18 分钟前
CSS中的Element语法
前端·css
Real_man25 分钟前
新物种与新法则:AI重塑开发与产品未来
前端·后端·面试
小彭努力中25 分钟前
147.在 Vue3 中使用 OpenLayers 地图上 ECharts 模拟飞机循环飞行
前端·javascript·vue.js·ecmascript·echarts
老马聊技术27 分钟前
日历插件-FullCalendar的详细使用
前端·javascript
咔咔一顿操作30 分钟前
Cesium实战:交互式多边形绘制与编辑功能完全指南(最终修复版)
前端·javascript·3d·vue
LuckyLay2 小时前
使用 Docker 搭建 Rust Web 应用开发环境——AI教你学Docker
前端·docker·rust
pobu1682 小时前
aksk前端签名实现
java·前端·javascript
烛阴2 小时前
带参数的Python装饰器原来这么简单,5分钟彻底掌握!
前端·python
0wioiw02 小时前
Flutter基础(前端教程⑤-组件重叠)
开发语言·前端·javascript