vue/cli 配置动态代理无需重启服务的方法


Posted in Vue.js onMay 20, 2022

vue脚手架指的是vue-cli,它是一个专门为单页面应用快速搭建繁杂的脚手架,它可以轻松的创建新的应用程序而且可用于自动生成vue和webpack的项目模板。

vue/cli 配置动态代理,无需重启服务

devServe = http://localhost:3000;
prodServe = http://localhost:4000;

1. 在vue.config.js文件中,配置代理服务

使用vue/cli@5创建的项目,默认会创建vue.config.js文件,如果项目中没有此文件,那么就手动在项目根路径创建vue.config.js文件。

const { defineConfig } = require('@vue/cli-service');
const createProxy = require('./dynamic_proxy');

module.exports = defineConfig({
    transpileDependencies: true,
    devServer: {
        proxy: {
            '/': {
                target: '',
                ws: false,
                changeOrigin: true,
                router: () => {
                    return createProxy();
                }
            }
        }
    }
});

2. 在项目根路径创建文件夹dynamic_proxy,并创建proxy.list.json文件以及index.js文件。

proxy.list.json

[
    {
        "name": "devServe",
        "ip": "http://xxx.xxx.xxx.xxx:3001",
        "active": true
    },
    {
        "name": "prodServe",
        "ip": "http://xxx.xxx.xxx.xxx:3000",
        "active": false
    }
]

index.js

const { readFileSync } = require('fs');
const { resolve } = require('path');
const getProxyList = () => {
    try {
        const proxyList = readFileSync(resolve(__dirname, './proxy.list.json'), 'utf-8');
        return JSON.parse(proxyList);
    } catch (error) {
        throw new Error(error);
    }
};
const getActiveProxy = () => {
    try {
        const proxyList = getProxyList();
        if (proxyList.some(i => i.active)) {
            return proxyList.find(i => i.active);
        }
    } catch (error) {
        throw new Error(error);
    }
};
module.exports = () => {
    return getActiveProxy().ip;
};

3. 运行命令

npm run serve

4. 需要切换服务时,直接修改proxy.list.json中的active选项,修改为true,就可以自动切换了

5. 原理解析

vue cli 的代理是使用的http-proxy-middleware包,所以proxy选项的配置也是基于这个包的配置。在proxy配置选项中有两个属性target以及router。其中target是默认的代理地址。而router可以return一个字符串服务地址,那么当两个选项都配置了时,http-proxy-middleware在解析配置时,会首先使用router函数的返回值,当router的返回值不可以用时,那么就会fallback至target。

http-proxy-middleware router配置源码

vue/cli 配置动态代理无需重启服务的方法

配置校验源码

vue/cli 配置动态代理无需重启服务的方法

可以由上面源码看出首先会校验配置,如果targetrouter都不存在的话,就会直接Error,从第一张图片源码可以看出,如果router存在的话,则会直接新建一个newTarget,并且将options.target赋值为newTarget

到此这篇关于vue/cli 配置动态代理,无需重启服务的文章就介绍到这了!


Tags in this post...

Vue.js 相关文章推荐
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
Nov 18 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
Vue vee-validate插件的简单使用
Jun 22 Vue.js
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
Vue提供的三种调试方式你知道吗
Jan 18 Vue.js
Vue中Object.assign清空数据报错的解决方案
Mar 03 Vue.js
vue实现可以快进后退的跑马灯组件
Apr 08 Vue.js
vue实现Toast组件轻提示
Apr 10 Vue.js
Vue ECharts实现机舱座位选择展示功能
May 15 #Vue.js
Vue组件化(ref,props, mixin,.插件)详解
vue postcss-px2rem 自适应布局
May 15 #Vue.js
VUE解决跨域问题Access to XMLHttpRequest at
vue使用watch监听属性变化
Apr 30 #Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
vue项目如何打包之项目打包优化(让打包的js文件变小)
You might like
php设计模式 Proxy (代理模式)
2011/06/26 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
JS中批量给元素绑定事件过程中的相关问题使用闭包解决
2013/04/15 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
jquery实现简单易懂的图片展示小例子
2013/11/21 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
详解前后端分离之VueJS前端
2017/05/24 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
微信小程序使用setData修改数组中单个对象的方法分析
2018/12/30 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
[02:27]刀塔重生降临
2015/10/14 DOTA
用python代码做configure文件
2014/07/20 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
详解Python中的动态属性和特性
2018/04/07 Python
python实现将文件夹下面的不是以py文件结尾的文件都过滤掉的方法
2018/10/21 Python
Python中安装easy_install的方法
2018/11/18 Python
WxPython建立批量录入框窗口
2019/02/27 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
PHP面试题附答案
2015/11/28 面试题
护理职业应聘自荐书
2013/09/29 职场文书
总经理秘书工作职责
2013/12/26 职场文书
新学期决心书
2014/03/11 职场文书
岗位说明书怎么写
2014/07/30 职场文书
信用卡工作证明模板
2014/09/14 职场文书
女方离婚起诉书
2015/05/18 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
python批量创建变量并赋值操作
2021/06/03 Python
mysql脏页是什么
2021/07/26 MySQL