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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
vue实现下载文件流完整前后端代码
Nov 17 Vue.js
在Vue中使用Echarts可视化库的完整步骤记录
Nov 18 Vue.js
Vue $attrs & inheritAttr实现button禁用效果案例
Dec 07 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
基于Vue3.0开发轻量级手机端弹框组件V3Popup的场景分析
Dec 30 Vue.js
vue浏览器返回监听的具体步骤
Feb 03 Vue.js
Vue实现动态查询规则生成组件
May 27 Vue.js
vue判断按钮是否可以点击
Apr 09 Vue.js
vue打包时去掉所有的console.log
Apr 10 Vue.js
vue postcss-px2rem 自适应布局
May 15 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
PHP5 面向对象(学习记录)
2009/12/02 PHP
为PHP初学者的8点有效建议
2010/11/20 PHP
PHP开发规范手册之PHP代码规范详解
2011/01/13 PHP
关于PHP中Object对象的笔记分享
2011/06/28 PHP
PHP explode()函数用法、切分字符串
2012/10/03 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
基于jQuery的日期选择控件
2009/10/27 Javascript
JavaScript与DOM组合动态创建表格实例
2012/12/23 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
jQuery实现获取table表格第一列值的方法
2016/03/01 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python3读取文件常用方法实例分析
2015/05/22 Python
Python基础教程之浅拷贝和深拷贝实例详解
2017/07/15 Python
Python操作csv文件实例详解
2017/07/31 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
中国旅游网站:同程旅游
2016/09/11 全球购物
尼克松手表官网:Nixon手表
2019/03/17 全球购物
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
婚纱店策划方案
2014/05/22 职场文书
党在我心中演讲稿
2014/09/02 职场文书
小学数学教学随笔
2015/08/14 职场文书