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

295 阅读1分钟

场景

vue2的版本本地开发调用多人的后台地址以及不同开发环境的切换,频繁多次的切换地址,在config.js里面改变地址需要重新重启项目,为了切换地址不重启项目,当然新项目可以用vite自动重启。这里说的是使用webpack的老项目。网上的案列在这里记录整理一下

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

// proxy.js 
const fs = require('fs')
const path = require('path') 
const encoding = 'utf-8' 
/** * 获取配置文件内容 
getContent('proxy-config.json') 
* @param filename env.json 
* @returns {string} 
*/ 
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 + ')')()
 } 
 /** * 获取配置选项 getConfig() * @returns {{}|*} */ 
const getConfig = () => {
  try {
  return jsonParse(getContent('proxy-config.json')) 
  }catch (e) {
   return {} 
   }
} 
module.exports = { 
  proxy: {
  // 接口匹配规则自行修改  这里可以根据需求来多配置一些代理地址
    [process.env.VUE_APP]: {//代理地址1
      target: 'that must have a empty placeholder', // 这里必须要有字符串来进行占位 
      changeOrigin: true, 
      router: () => (getConfig() || {}).target || ''//代理地址1
      pathRewrite: {
          ['^/api']:''
        }
      } 
    },
    [process.env.VUE_APP2]: {//代理地址2
      target: 'that must have a empty placeholder', // 这里必须要有字符串来进行占位 
      changeOrigin: true, 
      router: () => (getConfig() || {}).target2 || ''//代理地址2
       pathRewrite: {
          ['^']:''
        }
      } 
    }
  }

environments文件夹里面新建代理配置文件proxy-config.json

{ 
    "target": "https://www.baidu.com"//代理地址1
    "target2": "https://www.baidus.com"//代理地址2 可以根据需求写多个代理
}

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 } }