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 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
Vue与React的区别和优势对比
Dec 18 Vue.js
vue中使用echarts的示例
Jan 03 Vue.js
如何在vue中使用HTML 5 拖放API
Jan 14 Vue.js
使用vue3重构拼图游戏的实现示例
Jan 25 Vue.js
vue穿梭框实现上下移动
Jan 29 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
vue-cropper组件实现图片切割上传
May 27 Vue.js
vue+springboot实现登录验证码
May 27 Vue.js
vue3中provide && inject的使用
Jul 01 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 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 Ubb代码编辑器函数代码
2012/07/05 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
JavaScript Event学习第五章 高级事件注册模型
2010/02/07 Javascript
JavaScript 事件系统
2010/07/22 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
javascript实现图片循环渐显播放的方法
2015/02/24 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
详解javascript中原始数据类型Null和Undefined
2015/12/17 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
jQuery代码实现图片墙自动+手动淡入淡出切换效果
2016/05/09 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
实例讲解JavaScript中call、apply、bind方法的异同
2016/09/13 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
详解HTML5 使用video标签实现选择摄像头功能
2017/10/25 Javascript
vue组件生命周期详解
2017/11/07 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频
2018/12/05 DOTA
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
python正则表达式之作业计算器
2016/03/18 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
python getpass实现密文实例详解
2019/09/24 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
Madewell美德威尔美国官网:美国休闲服饰品牌
2016/11/25 全球购物
公司部门司机岗位职责
2014/01/03 职场文书
党员志愿者活动方案
2014/08/28 职场文书
公司财务制度:成本管理控制制度模板
2019/11/19 职场文书