返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue动态代理无须重启项目解决方案详解
  • 160
分享到

vue动态代理无须重启项目解决方案详解

2024-04-02 19:04:59 160人浏览 安东尼
摘要

目录1.背景2.技术方案2.1 旧的配置方案2.2 新的配置方案思路3. 配置1.背景 当我们Vue构建项目的时候,都会在vue.config.js中配置我们需要代理的服务器地址。有

1.背景

当我们Vue构建项目的时候,都会在vue.config.js中配置我们需要代理的服务器地址。有时候我们需要使用不同后端服务器地址,也就是我们开发中所说的测试环境、灰度环境、正式环境等,这个时候如果我们需要使用不同的环境地址的时候,就需要使用命令或者手动修改vue.config.js中配置来重新启动项目。当项目项目越来越大的时候,我们需要很长的时间来启动项目,如此反复,极大影响我们开发进度。这个时候我们急需一种vue动态代理无须重启项目解决方案来提高我们的开发项目,以此为背景,萌生出了以下方案。

2.技术方案

2.1 旧的配置方案

我们在vue.config.js中常用的代理方案如下:

const port = process.env.port || process.env.npm_config_port || 80 // 端口
module.exports = {
  lintOnSave: false,
  devServer: {
    host: '0.0.0.0',
    port,
    open: false,
    proxy: {
      '/my-api': {
        target: 'https://www.baidu.com',
        ws: false,
        changeOrigin: true,
      }
    }
  }
}

在启动项目的时候,只会读取一次配置文件,当再次修改target地址时,vue-cli是无法感知文件的变化,所以代理的还是旧的地址,所以我们需要重新启动项目来使配置生效。有没有一种方案,可以在修改配置的时候能使vue-cli感知到文件的变化,从而读取新的配置呢?方案入下:

2.2 新的配置方案思路

vue-cli 的代理是使用的Http-proxy-middleware包,所以proxy选项的配置也是基于这个包的配置。在proxy配置选项中有两个属性target以及router。其中target是默认的代理地址。而router可以return一个字符串服务地址,那么当两个选项都配置了时,http-proxy-middleware在解析配置时,会首先使用router函数的返回值,当router的返回值不可以用时,那么就会fallback至target。

http-proxy-middleware router配置源码

配置校验源码

我们可以使用proxyrouter来读取我们的代理配置文件,这样就可以实现修改代理配置文件来更新代理地址,无须启动项目。

3. 配置

vue.config.js中加入如下配置:

// vue.config.js
const dynamicProxy = require('./environments/proxy.js')
const port = process.env.port || process.env.npm_config_port || 80 // 端口
module.exports = {
  lintOnSave: false,
  devServer: {
    host: '0.0.0.0',
    port,
    open: false,
    proxy: dynamicProxy.proxy,
    disableHostCheck: true
  },
}

新建environments文件夹,同时在里面新建proxy.js文件

// proxy.js
const fs = require('fs')
const path = require('path')
const encoding = 'utf-8'

const getContent = filename => {
  const dir = path.resolve(process.cwd(), 'environments')
  return fs.readFileSync(path.resolve(dir, filename), { encoding })
}
const JSONParse = obj => {
  return Function('"use strict";return (' + obj + ')')()
}

const getConfig = () => {
  try {
    return jsonParse(getContent('proxy-config.json'))
  } catch (e) {
    return {}
  }
}
module.exports = {
  proxy: {
  	// 接口匹配规则自行修改
    ['/my-api']: {
      target: 'that must have a empty placeholder', // 这里必须要有字符串来进行占位
      changeOrigin: true,
      router: () => (getConfig() || {}).target || ''
    }
  }
}

proxy.js最后导出一个对象,这个对象跟我们以前使用的旧代理方案很像,但是多了一个router配置router函数返回执行getConfig函数读取配置文件的内容,也就是我们的代理地址。

environments目录下新建我们的代理配置文件proxy-config.json

{
    "target": "https://www.baidu.com"
}

当项目启动后,会读取我们的代理配置文件。我们在项目启动后,手动修改代理配置文件的代理地址,然后刷新页面,就可以使我们的新代理地址生效。

示例demo

GitHub.com/atdow/vue-d…

以上就是vue动态代理无须重启项目解决方案详解的详细内容,更多关于vue 动态代理的资料请关注编程网其它相关文章!

--结束END--

本文标题: vue动态代理无须重启项目解决方案详解

本文链接: https://lsjlt.com/news/167908.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue动态代理无须重启项目解决方案详解
    目录1.背景2.技术方案2.1 旧的配置方案2.2 新的配置方案思路3. 配置1.背景 当我们vue构建项目的时候,都会在vue.config.js中配置我们需要代理的服务器地址。有...
    99+
    2024-04-02
  • 当启动vue项目安装依赖时报错的解决方案
    目录启动vue项目安装依赖报错暂时想到四个原因vue必备安装依赖1.elementUI2.安装sass3.安装axios4.安装vuex5.安装js-cookie启动vue项目安装依...
    99+
    2024-04-02
  • Java静态代理与动态代理案例详解
    代理模式 代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象...
    99+
    2024-04-02
  • vue/cli 配置动态代理无需重启服务的操作方法
    vue脚手架指的是vue-cli,它是一个专门为单页面应用快速搭建繁杂的脚手架,它可以轻松的创建新的应用程序而且可用于自动生成vue和webpack的项目模板。 vue/cli 配置...
    99+
    2024-04-02
  • idea启动项目很久很慢的一种解决方案
    一、问题描述         IntelliJ idea 在启动项目时,很久很慢。 二、解决         在不买个更强更贵的前提下,有以下一种解决方案(ಥ_ಥ)          ​​​​​​​    1、方案依据         一般...
    99+
    2023-09-04
    intellij-idea java ide
  • vue项目中Eslint校验代码报错的解决方案
    目录vue Eslint校验代码报错1.空格缩进,不让使用tab2.未使用的变量报错3.分号和引号问题vue使用Eslint报错解决办法很简单vue Eslint校验代码报错 在使用...
    99+
    2024-04-02
  • 详解CentOS重启后resolv.conf被重置的解决方案
    近期在修改一台CHyBiUcmentOS服务器的dns时发现只要重启服务器DNS就会被强制还原,解决方案如下: 1、首先在网卡设置中修改NM_CONTROLLED的值: 修改文件/etc/sysconfig/networ...
    99+
    2022-06-04
    resolv.conf重启 resolvconf 服务重启
  • win10计算机反复重启无法启动的解决方案教程
    如何解决计算机重复无法打开的问题?许多朋友遇到了计算机重复的问题,但这可能是由于驱动不兼容或硬件问题造成的。今天,我们为您带来了计算机重复无法打开的解决方案。让我们一起学习。如何解决计算机反复重启无法打开机器的问题。驱动器不易重启,此时需要...
    99+
    2023-07-10
  • 详解antd+react项目迁移vite的解决方案
    antd+react+webpack往往是以react技术栈为主的前端项目的标准组合,三者都有成熟的生态和稳定的表现,但随着前端圈的技术不断革新,号称下一代构建平台vite2的发布,...
    99+
    2024-04-02
  • SQL Server代理服务无法启动的解决方法
    这篇文章给大家分享的是有关SQL Server代理服务无法启动的解决方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。SQL Server代理服务无法启动问题的确很让我们头疼,下...
    99+
    2024-04-02
  • springboot项目启动的时候参数无效的解决
    目录springboot项目启动的时候参数无效改动run方法的参数,添加args参数如下springboot项目启动参数设置问题Spring boot项目常用的几种启动方式war包部...
    99+
    2024-04-02
  • PHP在Ubuntu上无法启动的解决方案
    PHP在Ubuntu上无法启动的问题是很常见的,可能是由于配置错误、插件冲突或者服务未正确启动等原因导致的。为了解决这个问题,我们需要逐步排查可能的原因,并根据具体情况进行相应的调整和...
    99+
    2024-02-28
    ubuntu php 解决方案: 启动
  • vue严格模式启动项目报错如何解决
    本篇内容介绍了“vue严格模式启动项目报错如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先,我们需要了解什么是Vue.js的严格模...
    99+
    2023-07-06
  • vue项目内存溢出问题及解决方案
    目录vue项目内存溢出的解决vue项目内存溢出问题问题解决方法1解决方法2总结vue项目内存溢出的解决 最近在对原有项目进行迭代升级,有用代码越来越多,导致内存溢出了。 正常启动运行...
    99+
    2023-01-28
    vue项目内存溢出 vue内存溢出 内存溢出问题
  • SpringCloud项目的log4j2漏洞解决方案详解流程
     步骤如下: <properties> <log4j2.version>2.15.0</log4j2.version> <...
    99+
    2024-04-02
  • 启动vue项目安装依赖时报错怎么解决
    今天小编给大家分享一下启动vue项目安装依赖时报错怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。启动vue项目安装依...
    99+
    2023-06-29
  • springboot项目突然启动缓慢的解决方法
    这篇文章将为大家详细讲解有关springboot项目突然启动缓慢的解决方法,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。springboot项目突然启动缓慢springboot项目在debu...
    99+
    2023-06-25
  • Java @Async注解导致spring启动失败解决方案详解
    目录前言一、异常表现,抛出内容1.1循环依赖的两个class1.2启动报错二、原因分析2.1主要原因2.2循环依赖放入二级缓存处逻辑2.3initializeBean生成的对象2.4...
    99+
    2024-04-02
  • SQL Server代理服务无法启动怎么解决
    这篇文章主要讲解了“SQL Server代理服务无法启动怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SQL Server代理服务无法启动怎么解决”...
    99+
    2024-04-02
  • Android应用启动白屏处理方案详解
    目录正文配置一个SplashActivity让我们来看看logo_drawable注意:总结正文 相信大家一定遇到过某些App在手机桌面打开时会出现短暂或者几秒钟的白屏情况吧,没错...
    99+
    2023-02-27
    Android启动白屏处理 Android 白屏处理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作