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使用vant中的checkbox实现全选功能
Nov 17 Vue.js
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 Vue.js
vue基于Echarts的拖拽数据可视化功能实现
Dec 04 Vue.js
vue图片裁剪插件vue-cropper使用方法详解
Dec 16 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
vue实现登录功能
Dec 31 Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
详解Vue slot插槽
Nov 20 Vue.js
vue自定义右键菜单之全局实现
Apr 09 Vue.js
vue el-table实现递归嵌套的示例代码
Aug 14 Vue.js
Vue Element plus使用方法梳理
Dec 24 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操作文件方法问答
2007/03/16 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
[全兼容哦]--实用、简洁、炫酷的页面转入效果loing
2007/05/07 Javascript
基于jquery的loading效果实现代码
2010/11/05 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
javascript关于继承解析
2016/05/10 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
ES6正则表达式的一些新功能总结
2017/05/09 Javascript
Bootstrap 表单验证formValidation 实现远程验证功能
2017/05/17 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
2018/03/05 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
Python统计文件中去重后uuid个数的方法
2015/07/30 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
Python同步遍历多个列表的示例
2019/02/19 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
Python 爬虫实现增加播客访问量的方法实现
2019/10/31 Python
Django CBV模型源码运行流程详解
2020/08/17 Python
python中reload重载实例用法
2020/12/15 Python
两种CSS3伪类选择器详细介绍
2013/12/24 HTML / CSS
星空联盟C# .net笔试题
2014/12/05 面试题
预备党员转正思想汇报
2014/01/12 职场文书
高中政治教学反思
2014/01/18 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
vue 实现上传组件
2021/05/31 Vue.js
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
Redis高可用集群redis-cluster详解
2022/03/20 Redis
Python采集壁纸并实现炫轮播
2022/04/30 Python