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 相关文章推荐
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
vue实现表格合并功能
Dec 01 Vue.js
用vue设计一个日历表
Dec 03 Vue.js
Vue仿百度搜索功能
Dec 28 Vue.js
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 Vue.js
vue 实现上传组件
May 31 Vue.js
一篇文章学会Vue中间件管道
Jun 20 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
详解Vue router路由
Nov 20 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 Vue.js
Vue 打包后相对路径的引用问题
Jun 05 Vue.js
vue3 自定义图片放大器效果的示例代码
Jul 23 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调用接口API封装的例子
2019/10/11 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
vuejs父子组件之间数据交互详解
2017/08/09 Javascript
javascript 判断用户有没有操作页面
2017/10/17 Javascript
JS解决position:sticky的兼容性问题的方法
2017/10/17 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
基于jQuery的$.getScript方法去加载javaScript文档解析
2017/11/08 jQuery
用最少的JS代码写出贪吃蛇游戏
2018/01/12 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
react实现复选框全选和反选组件效果
2020/08/25 Javascript
vue+高德地图实现地图搜索及点击定位操作
2020/09/09 Javascript
python flask实现分页效果
2017/06/27 Python
python放大图片和画方格实现算法
2018/03/30 Python
python2.6.6如何升级到python2.7.14
2018/04/08 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
Django基础知识 web框架的本质详解
2019/07/18 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
python实现按日期归档文件
2021/01/30 Python
HTML文本属性&颜色控制属性的实现
2019/12/17 HTML / CSS
Html5 webRTC简单实现视频调用的示例代码
2020/09/23 HTML / CSS
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
高中化学教学反思
2014/01/13 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
电视节目策划方案
2014/05/16 职场文书
俞敏洪一分钟演讲稿
2014/08/26 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
志愿者服务活动总结报告
2015/05/06 职场文书
MySQL开启事务的方式
2021/06/26 MySQL
docker 制作mysql镜像并自动安装
2022/05/20 Servers