解决Vue3.0 动态配置IP及端口,打包后随时改随时生效

该博客介绍了一种在Vue项目中避免多环境配置的方法,通过Ajax同步获取public目录下的config.json配置文件,动态设置axios的基础URL,实现不同环境部署时无需频繁修改打包配置。文章详细讲解了从创建config.json到封装axios请求,再到main.js引入和调用接口的全过程,使得打包后的配置更改能即时生效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

假如你的Vue项目需要在多个服务器部署,若使用代理的模式,每个环境都需要先改IP地址及端口,再打包,非常的麻烦,所以本文没有用代理,而是通过Ajax同步获取配置文件信息,封装一个axios请求


一、建立public目录及配置文件

在主目录(即和src同目录)创建public文件夹,创建config.json文件
在这里插入图片描述
config.json文件实例:
{
“url”: “http://localhost:8090”,
“webSocket”: “ws://localhost:8090//webSocket/”
}

二、封装axios请求及引入

1.封装axios请求 api->index.js

在这里插入图片描述
api->index.js代码如下:

import axios from 'axios'
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
let baseURL;
let webSocket;

const getBaseUrl = function () {
    $.ajax({
        type : "get",
        async: false, // fasle表示同步请求,true表示异步请求
        url : "./config.json",
        data : {},
        success : function(result) {
            baseURL = result.url;
            webSocket = result.webSocket;
        },
        error : function(e){
            console.log(e);
        }
    });
};

//动态获取ip
getBaseUrl();

const instance = axios.create({
    baseURL: baseURL
})

//全局请求拦截
instance.interceptors.request.use(function(request) {
    return request;
}, function(error) {
    return Promise.reject(error);
})

//全局响应拦截
instance.interceptors.response.use(function(response) {
    return response;
}, function(error) {
    return Promise.reject(error);
})


const get = (url, params) => {
    return instance.get(url, params)
}

const post = (url, data) => {
    return instance.post(url, data)
}

// 因为我的项目之前调接口使用的是this.$axios.post()  
// 为了不动之前的代码 所以这里用了$axios 若是新项目,可自定义名称,方便与原版的$axios区分
export default function(Vue) {
    Vue.prototype.$axios = {
        baseURL,
        webSocket,
        get,
        post
    }
}

2.main.js引入上一步封装的index.js

在这里插入图片描述
main.js代码如下(示例):

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
Vue.use(ElementUI);
import 'amfe-flexible'
import 'element-ui/lib/theme-chalk/index.css';

// 因为我的项目之前调接口使用的是this.$axios.post()  
// 为了不动之前的代码 所以这里用了$axios 若是新项目,可自定义名称,方便与原版的$axios区分
import $axios from "./api/index.js"
Vue.use($axios)

import qs from 'qs'
Vue.prototype.$qs = qs
import Echart from "echarts";
Vue.prototype.$echarts = Echart;
import moment from "moment";
Vue.prototype.$moment = moment;
Vue.config.productionTip = false;

new Vue({
    router,
    store,
    render: h => h(App)
}).$mount('#app')

3.调用接口代码不变

调用代码示例

methods: {
	getData() {
	      this.$axios.get("/api/getData").then((res) => {
	       //。。。
	     });
	}
}

4.打包后修改配置,改完即时生效

在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值