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中,在npmrun serve 中新增
資源搜尋網站大全 https://www.renrenfan.com.cn 廣州VI設計公司https://www.houdianzi.com
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':'/'
}
}
}
}
}
這樣就可以根據不同的環境配置不同的地址了。