vue/cli?配置動(dòng)態(tài)代理無(wú)需重啟服務(wù)的操作方法
vue腳手架指的是vue-cli,它是一個(gè)專(zhuān)門(mén)為單頁(yè)面應(yīng)用快速搭建繁雜的腳手架,它可以輕松的創(chuàng)建新的應(yīng)用程序而且可用于自動(dòng)生成vue和webpack的項(xiàng)目模板。
vue/cli 配置動(dòng)態(tài)代理,無(wú)需重啟服務(wù)
devServe = http://localhost:3000; prodServe = http://localhost:4000;
1. 在vue.config.js文件中,配置代理服務(wù)
使用vue/cli@5創(chuàng)建的項(xiàng)目,默認(rèn)會(huì)創(chuàng)建vue.config.js文件,如果項(xiàng)目中沒(méi)有此文件,那么就手動(dòng)在項(xiàng)目根路徑創(chuàng)建vue.config.js文件。
const { defineConfig } = require('@vue/cli-service'); const createProxy = require('./dynamic_proxy'); module.exports = defineConfig({ transpileDependencies: true, devServer: { proxy: { '/': { target: '', ws: false, changeOrigin: true, router: () => { return createProxy(); } } } } });
2. 在項(xiàng)目根路徑創(chuàng)建文件夾dynamic_proxy
,并創(chuàng)建proxy.list.json
文件以及index.js
文件。
proxy.list.json
[ { "name": "devServe", "ip": "http://xxx.xxx.xxx.xxx:3001", "active": true }, { "name": "prodServe", "ip": "http://xxx.xxx.xxx.xxx:3000", "active": false } ]
index.js
const { readFileSync } = require('fs'); const { resolve } = require('path'); const getProxyList = () => { try { const proxyList = readFileSync(resolve(__dirname, './proxy.list.json'), 'utf-8'); return JSON.parse(proxyList); } catch (error) { throw new Error(error); } }; const getActiveProxy = () => { try { const proxyList = getProxyList(); if (proxyList.some(i => i.active)) { return proxyList.find(i => i.active); } } catch (error) { throw new Error(error); } }; module.exports = () => { return getActiveProxy().ip; };
3. 運(yùn)行命令
npm run serve
4. 需要切換服務(wù)時(shí),直接修改proxy.list.json
中的active
選項(xiàng),修改為true
,就可以自動(dòng)切換了
5. 原理解析
vue cli 的代理是使用的http-proxy-middleware
包,所以proxy
選項(xiàng)的配置也是基于這個(gè)包的配置。在proxy
配置選項(xiàng)中有兩個(gè)屬性target
以及router
。其中target
是默認(rèn)的代理地址。而router
可以return一個(gè)字符串服務(wù)地址,那么當(dāng)兩個(gè)選項(xiàng)都配置了時(shí),http-proxy-middleware
在解析配置時(shí),會(huì)首先使用router函數(shù)的返回值,當(dāng)router的返回值不可以用時(shí),那么就會(huì)fallback至target。
http-proxy-middleware router配置源碼
配置校驗(yàn)源碼
可以由上面源碼看出首先會(huì)校驗(yàn)配置,如果target
和router
都不存在的話(huà),就會(huì)直接Error,從第一張圖片源碼可以看出,如果router存在的話(huà),則會(huì)直接新建一個(gè)newTarget
,并且將options.target
賦值為newTarget
;
到此這篇關(guān)于vue/cli 配置動(dòng)態(tài)代理,無(wú)需重啟服務(wù)的文章就介紹到這了,更多相關(guān)vue cli 配置動(dòng)態(tài)代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Element?UI中v-infinite-scroll無(wú)限滾動(dòng)組件使用詳解
在移動(dòng)端數(shù)據(jù)的更新中許多方法孕育而生,無(wú)限滾輪也是解決的方案一種,Element-ui為vue開(kāi)發(fā)了一個(gè)事件(v-infinite-scroll),下面這篇文章主要給大家介紹了關(guān)于Element?UI中v-infinite-scroll無(wú)限滾動(dòng)組件使用的相關(guān)資料,需要的朋友可以參考下2023-02-02解決vue數(shù)組中對(duì)象屬性變化頁(yè)面不渲染問(wèn)題
今天小編就為大家分享一篇解決vue數(shù)組中對(duì)象屬性變化頁(yè)面不渲染問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08vue input實(shí)現(xiàn)點(diǎn)擊按鈕文字增刪功能示例
這篇文章主要介紹了vue input實(shí)現(xiàn)點(diǎn)擊按鈕文字增刪功能,涉及基于vue.js的事件響應(yīng)及頁(yè)面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-01-01Vue.js+HighCharts實(shí)現(xiàn)動(dòng)態(tài)請(qǐng)求展示時(shí)序數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了Vue.js+HighCharts實(shí)現(xiàn)動(dòng)態(tài)請(qǐng)求展示時(shí)序數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Vue中用props給data賦初始值遇到的問(wèn)題解決
這篇文章主要介紹了Vue中用props給data賦初始值遇到的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11