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 Elenent实现表格相同数据列合并
Nov 30 Vue.js
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
Vue实现简单购物车功能
Dec 13 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
vue二选一tab栏切换新做法实现
Jan 19 Vue.js
Vue项目打包部署到apache服务器的方法步骤
Feb 01 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
Vue-router编程式导航的两种实现代码
Mar 04 Vue.js
详解Vue的sync修饰符
May 15 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
三种方式清除vue路由跳转router-link的历史记录
Apr 10 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
在任意字符集下正常显示网页的方法一
2007/04/01 PHP
php检查页面是否被百度收录
2015/10/28 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
PHP Include文件实例讲解
2019/02/15 PHP
php数值计算num类简单操作示例
2020/05/15 PHP
解密效果
2006/06/23 Javascript
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
jquery 3D球状导航的文章分类
2010/07/06 Javascript
javascript中Object使用详解
2015/01/26 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
在Python的Flask中使用WTForms表单框架的基础教程
2016/06/07 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python 正确保留多位小数的实例
2018/07/16 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
2020/10/31 Python
Django模板报TemplateDoesNotExist异常(亲测可行)
2020/12/18 Python
浏览器实现移动端高性能css3动画(开启gpu加速)
2013/12/23 HTML / CSS
HTML5中微数据概述及在搜索引擎中的使用举例
2013/02/07 HTML / CSS
Merrell迈乐澳大利亚网站:购买户外登山鞋
2017/05/28 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
来自南加州灵感的工作和娱乐服装:TravisMathew
2019/05/01 全球购物
冰淇淋开店创业计划书
2014/02/01 职场文书
后备干部推荐材料
2014/12/24 职场文书
统计工作个人总结
2015/03/03 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
解放思想大讨论活动总结
2015/05/09 职场文书
素质拓展训练感想
2015/08/07 职场文书