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动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
Vue中ref和$refs的介绍以及使用方法示例
Jan 11 Vue.js
Vue项目中使用mock.js的完整步骤
Jan 12 Vue.js
vue3 watch和watchEffect的使用以及有哪些区别
Jan 26 Vue.js
如何让vue长列表快速加载
Mar 29 Vue.js
Vue vee-validate插件的简单使用
Jun 22 Vue.js
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
vue如何使用模拟的json数据查看效果
Mar 31 Vue.js
vue实现拖拽交换位置
Apr 07 Vue.js
vue自定义右键菜单之全局实现
Apr 09 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
奉献出一个封装的curl函数 便于调用(抓数据专用)
2013/07/22 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
php递归函数怎么用才有效
2018/02/24 PHP
完美解决JS中汉字显示乱码问题(已解决)
2006/12/27 Javascript
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
JS 打印功能代码可实现打印预览、打印设置等
2014/10/31 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
js 创建对象 经典模式全面了解
2016/08/16 Javascript
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
JS中使用textPath实现线条上的文字
2017/12/25 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
vue登录以及权限验证相关的实现
2019/10/25 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
Python中返回字典键的值的values()方法使用
2015/05/22 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python简单实现控制电脑的方法
2018/01/22 Python
numpy添加新的维度:newaxis的方法
2018/08/02 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
彻底解决pip下载pytorch慢的问题方法
2021/03/01 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
大学生入党自我鉴定
2013/10/31 职场文书
数控技术专业推荐信
2013/11/01 职场文书
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
升学宴来宾致辞
2015/07/27 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
2022/05/25 SQL Server
小程序自定义轮播图圆点组件
2022/06/25 Javascript