Vue2 打包部署后通过修改配置文件修改全局变量——实时生效

1、需求说明

在生产实践中,经常会遇到需要对系统的功能或表现样式做一些更改,网上有些例子:

1)比如使用copy组件拷贝到public,生产验证失败。

2)将配置放在public下的js中,按需应用,生产验证失败。

我这里提供一种简单的实现方法:

在main.js中通过axios获取json数据后挂载到app中,这样在组件中可以通过 this 来方便的访问。

2、实现方法

1)新建json配置文件

在yudao-ui-admin-vue2\public\下新建setting.json,内容只要是json格式就行,例如:

java 复制代码
{
  "drawerWidthEnabled": true,
  "reportServer": "http://192.168.1.222:3000/big"
}

2)修改 vue 实例化过程

在src\main.js的末尾处将 app的初始化过程修改为:

java 复制代码
//要引入axios才能用
//注意获取config.json的地址
import axios from 'axios'
axios.get(process.env.VUE_APP_PUBLISH_PATH + "uhr_setting.json").then((resp)=>{
  var conf = resp.data;
  Vue.prototype.setting = conf
  app = new Vue({
    el: '#app',
    router,
    store,
    render: h => h(App)
  })
}).catch((error)=>{console.log(error)});

process.env.VUE_APP_PUBLISH_PATH来自于 .env.xxx配置文件 ,表示应用发布路径,经常是二级发布目录,如数据大屏: /big/,这样要注意一下最后有个反斜杠 /

3)在组件中使用

组件中直接通过this.setting来访问配置属性,非常方便。

java 复制代码
<template>
  <div class="">
    <doc-alert v-if="0" title="大屏设计器" url="https://doc.iocoder.cn/report/screen/" />
    <i-frame v-if="url" :src="url" />
  </div>
</template>
<script>
import iFrame from "@/components/iFrame/index";
import { setTenantId, getTenantId} from "@/utils/auth";
export default {
  name: "BigScreen",
  components: { iFrame },
  props: {
    /* 数据大屏的id */
    value: {
      type: String,
      default: "",
    },
  },
  data() {
    return {
      url: undefined,
    };
  },
  mounted(){
    var reportId = this.$route.params.id || this.$route.query.id || this.value
    if(reportId){
      this.url =  this.setting.reportServer + "/chart/preview/"+reportId+"?sso=true"
    } else {
      this.url = this.setting.reportServer + "/?sso=true";
    }
  }
};
</script>
相关推荐
极客密码8 小时前
感谢雷总!Mimo大模型价值¥659/月的 MAX 套餐,让我免费领到了!
前端·ai编程·claude
深念Y9 小时前
我明白为什么B站没法在浏览器开直播了——Windows Chrome推流踩坑全记录
前端·chrome·webrtc·浏览器·srs·直播·flv
zhangxingchao9 小时前
AI应用开发七:可以替代 RAG 的技术
前端·人工智能·后端
Sun@happy9 小时前
现代 Web 前端渗透——基础篇(1)
前端·web安全
希冀12310 小时前
【CSS学习第十一篇】
前端·css·学习
隔窗听雨眠10 小时前
doctype、charset、meta如何控制整个渲染流水线
java·服务器·前端
kyriewen10 小时前
写组件文档写到吐?我用AI自动生成Storybook,同事以后直接抄
前端·javascript·面试
excel10 小时前
🧠 Prisma 表名大写 vs SQL 导出小写问题深度解析(附踩坑与解决方案)
前端·后端
周淳APP10 小时前
【前端工程化原理通识:从源头到运行时的理论阐述】
前端·编译·打包·前端工程化
五点六六六11 小时前
你敢信这是非Native页面写出来的渐变效果吗🌝(底层原理解析
前端·javascript·面试