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的mixin策略
Nov 19 Vue.js
用vue设计一个日历表
Dec 03 Vue.js
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
Vue中computed和watch有哪些区别
Dec 19 Vue.js
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
Dec 25 Vue.js
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
vue-resource 拦截器interceptors使用详解
Jan 18 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
Vite和Vue CLI的优劣
Jan 30 Vue.js
vue 动态添加的路由页面刷新时失效的原因及解决方案
Feb 26 Vue.js
Vue3中toRef与toRefs的区别
Mar 24 Vue.js
vue选项卡切换的实现案例
Apr 11 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实现分页的一个示例
2006/10/09 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
PHP 无限级分类
2017/05/04 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
Iframe 自适应高度并实时监控高度变化的js代码
2009/10/30 Javascript
javascript动态加载实现方法一
2012/08/22 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
jQuery如何解决IE输入框不能输入的问题
2016/10/08 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
深入探究node之Transform
2017/07/20 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
2018/06/11 Python
python异步存储数据详解
2019/03/19 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
python logging.info在终端没输出的解决
2020/05/12 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
python绘图模块之利用turtle画图
2021/02/12 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
Perfume’s Club德国官网:在线购买香水
2019/04/08 全球购物
优秀实习生感言
2014/03/01 职场文书
爱国演讲稿400字
2014/05/07 职场文书
经济贸易系求职信
2014/08/04 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL