Vue多環境代理配置

Vue多環境代理配置

背景: 多人協做模式下,修改代理比較麻煩,並且很容易某個開發人員會修改了vue.config.js文件後提交了。第一,很容易引發衝突。 第二,很容易出現代理錯誤,須要排查。並且如今微服務盛行,在生產環境下有網關配置,不會出錯,可是在本地調試會形成麻煩,如修改了代理地址須要同步修改代理中的地址,很麻煩也很容易出錯。
解決思路:javascript

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中配置代理vue

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的狀況,形成以上說的錯誤。java

解決方案:
vue中提供了 --mode 模式,並提供了 .env.local 等文件,此文件被git忽略,且可根據當前 mode設置的值尋找環境變量配置,例如 --mode=dev ,則.env.dev.local 或.env.dev 等文件中的配置會生效,.local文件會被git忽略,所以我們用這個,--mode設置在 package.json中,在npm run serve 中添加ios

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

在項目根目錄下jianli .env.dev.local文件,文件中添加 如下鍵值對(此文件中只接受鍵值對

.env.dev.localgit

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

固然可根據不一樣的模式創建不一樣的local文件
.env.prod.local等vue-cli

vue.config.js中改寫npm

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':'/'
              }
          }
        }
    }
}

這樣就能夠根據不一樣的環境配置不一樣的地址了。json

相關文章
相關標籤/搜索