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开发chrome插件,实现获取界面数据和保存到数据库功能
Dec 01 Vue.js
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 Vue.js
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
vue 中 get / delete 传递数组参数方法
Mar 23 Vue.js
vue项目多环境配置(.env)的实现
Jul 21 Vue.js
Vue.js中v-bind指令的用法介绍
Mar 13 Vue.js
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
vue+iview实现手机号分段输入框
Mar 25 Vue.js
vue使用refs获取嵌套组件中的值过程
Mar 31 Vue.js
vue中的可拖拽宽度div的实现示例
Apr 08 Vue.js
vue router 动态路由清除方式
May 25 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单例模式示例分享
2015/02/12 PHP
PHP7基于curl实现的上传图片功能
2018/05/11 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
jQuery boxy弹出层插件中文演示及使用讲解
2011/02/24 Javascript
Javascript跨域请求的4种解决方式
2013/03/17 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
vue 2.0路由之路由嵌套示例详解
2017/05/08 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
vue-cli 组件的导入与使用教程详解
2018/04/11 Javascript
Next.js实现react服务器端渲染的方法示例
2019/01/06 Javascript
vue axios请求成功却进入catch的原因分析
2020/09/08 Javascript
深入学习python的yield和generator
2016/03/10 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
python实现一组典型数据格式转换
2018/12/15 Python
基于Python实现用户管理系统
2019/02/26 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
pytorch中的inference使用实例
2020/02/20 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
融资合作协议书范本
2014/10/17 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
《迟到》教学反思
2016/02/24 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
CSS 鼠标选中文字后改变背景色的实现代码
2023/05/21 HTML / CSS