Vue多环境代理配置

38次阅读

共计 1793 个字符,预计需要花费 5 分钟才能阅读完成。

Vue 多环境代理配置

背景:多人协作模式下,修改代理比较麻烦,而且很容易某个开发人员会修改了 vue.config.js 文件后提交了。第一,很容易引起冲突。第二,很容易出现代理错误,需要排查。而且现在微服务盛行,在生产环境下有网关配置,不会出错,但是在本地调试会造成麻烦,如修改了代理地址需要同步修改代理中的地址,很麻烦也很容易出错。
解决思路:

1. 开发中定义常量 js 文件,例如 constants.js。用户存放各个服务需要代理的服务名。
 let api = ""let loginServer ="/loginServer"let businessServer ="/businessServe"if(process.env.NODE_ENV =="development"){
        api = "/api"
        loginServer = api + LoginServer
        businessServer = api + businessServer
    }
    export {
        loginServer,
        businessServer
    }
 其中 api 为代理规则中配置,loginServer 为服务名,可根据业务需要替换
在实际的业务中就可以这么用 
 import {loginServer} from 'constants'
 function login(params){return  axios.post(loginServer+"/login",params)
 }

其中 loginServer 为服务名,login 为方法名,params 为参数。
在 vue.config.js 中配置代理

modules.exports = {
    publicPath:"/" ,
    devServer: {
        port: 8080,
        proxy:{
          '/api/loginServer':{
              target:"http://localhost:8080",
              ws:true,
              changeOrigin:true,
              pathRewrite:{'^/api':'/'}
          },
           '/api/businessServer':{
              target:"http://localhost:8081",
              ws:true,
              changeOrigin:true,
              pathRewrite:{'^/api':'/'}
          }
        }
    }
}

这么配置可以满足需求,但是会有多人改动 vue.config.js 的情况,造成以上说的错误。

解决方案:
vue 中提供了 –mode 模式,并提供了 .env.local 等文件,此文件被 git 忽略,且可根据当前 mode 设置的值寻找环境变量配置,例如 –mode=dev,则.env.dev.local 或.env.dev 等文件中的配置会生效,.local 文件会被 git 忽略,因此咱们用这个,–mode 设置在 package.json 中,在 npm run serve 中添加

script:{"serve":"vue-cli-service serve --mode=dev"}

在项目根目录下 jianli .env.dev.local 文件,文件中添加 以下键值对(此文件中只接受键值对

.env.dev.local

loginServerURL =http://localhost:8080
businessServerURL = http://localhost:8081

当然可根据不同的模式建立不同的 local 文件
.env.prod.local 等

vue.config.js 中改写

modules.exports = {
    publicPath:"/" ,
    devServer: {
        port: 8080,
        proxy:{
          '/api/loginServer':{
              target:process.env.loginServerURL?process.env.loginServerURL:"httpL//localhost:8080",
              ws:true,
              changeOrigin:true,
              pathRewrite:{'^/api':'/'}
          },
           '/api/businessServer':{
              target:process.env.loginServerURL?process.env.businessServerURL :"http://localhost:8081",
              ws:true,
              changeOrigin:true,
              pathRewrite:{'^/api':'/'}
          }
        }
    }
}

这样就可以根据不同的环境配置不同的地址了。

正文完
 0