如何解決webpack-dev-server代理常切換問題
背景
通常我們有一份webpack.dev.config.js使用webpack-dev-server的proxy,代理到開發(fā)服務(wù)器,來解決本地跨域問題。假如項(xiàng)目變大,可能需要proxy到不同環(huán)境,比如docker,或者后端開發(fā)人員的電腦上
現(xiàn)有問題
- 需要手動(dòng)更改proxy配置,比較麻煩還容易寫錯(cuò)
- 改變后的config文件會(huì)被git檢測到
- 不小心將本地修改的配置push到遠(yuǎn)程倉庫,對其他人造成困擾
需求
假如本地開發(fā)服務(wù)器是dev.xxx.cn,docker環(huán)境是docker.xxx.cn,服務(wù)端開發(fā)人員ip是192.168.1.1
因?yàn)槲冶镜赜昧薵ulp,啟動(dòng)前端開發(fā)環(huán)境到命令是 gulp local (與 npm run xx 的效果差不多),那么我希望
- 當(dāng)gulp local的時(shí)候,proxy 為 dev.xxx.cn
- 當(dāng)gulp local -t docker的時(shí)候,proxy 為 docker.xxx.cn
- 當(dāng)gulp local -t 192.168.1.1的時(shí)候,proxy 為 192.168.1.1
解決方案
創(chuàng)建webpack.local.js,proxy配置如下
proxy: {
'/api/**': {
target: 'http://{target|dev}.xxx.cn',
changeOrigin: true,
},
}
在我們運(yùn)行 gulp local 時(shí),讀取local.config文件,替換{target|dev}為 -t 后的內(nèi)容,比如 gulp local -t docker ,替換后變?yōu)?'http://docker.xxx.cn'
再將替換后的文件內(nèi)容輸出到一個(gè)名為webpack.local.target.js的文件里,然后執(zhí)行 webpack-dev-server -c webpack.local.target.js
最后修改.gitignore文件,加入webpack.loc.target.js,這樣每次生成的文件就不會(huì)被誤push到遠(yuǎn)程
實(shí)現(xiàn)細(xì)節(jié)
上面的配置中 {target|dev} |后面的dev是執(zhí)行 gulp local 時(shí)的默認(rèn)選項(xiàng)
const { t } = gulputil.env
let config = fs.readFileSync(_path.join(__dirname, '/webpack.loc.js')).toString()
if (/\d{1,3}(\.\d{1,3}){3}/.test(t)) {
config = config.replace(/\\{target[^}]+\\}[^']*/g, t)
} else if (typeof t === 'string' && t.length > 0) {
config = config.replace(/\\{target[^}]+\\}/g, t)
} else {
config = config.replace(/\\{target\\|([^}]+)\\}/g, '$1')
}
fs.writeFileSync(_path.join(__dirname, '/webpack.loc.target.js'), config)
第一個(gè)if判斷內(nèi)容為-t后的參數(shù)是否為ip,如果是,替換 'http://{target|dev}.xxx.cn' 為 http://192.168.1.1
第二個(gè)判斷是否有參數(shù),如果有,替換為 http://docker.xxx.cn
第三個(gè)判斷就是直接運(yùn)行 gulp local 不加 -t 時(shí),替換為 http://dev.xxx.cn
正則不太懂可以看我另一篇文章《正則速記法》
覺得運(yùn)行開發(fā)環(huán)境打包慢可以看《webpack性能榨汁機(jī)》
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
js實(shí)現(xiàn)省市聯(lián)動(dòng)效果的簡單實(shí)例
本篇文章主要是對js實(shí)現(xiàn)省市聯(lián)動(dòng)效果的簡單實(shí)例進(jìn)行了介紹,需要的朋友可以過來,希望對大家有所幫助2014-02-02
Antd中Table列表行默認(rèn)包含修改及刪除功能的封裝方法
這篇文章主要介紹了Antd中Table列表行默認(rèn)包含修改及刪除功能的封裝,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
微信小程序MUI導(dǎo)航欄透明漸變功能示例(通過改變opacity實(shí)現(xiàn))
這篇文章主要介紹了微信小程序MUI導(dǎo)航欄透明漸變功能,結(jié)合實(shí)例形式分析了通過改變opacity實(shí)現(xiàn)透明度漸變功能相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
JavaScript創(chuàng)建一個(gè)object對象并操作對象屬性的用法
這篇文章主要介紹了JavaScript創(chuàng)建一個(gè)object對象并操作對象屬性的用法,實(shí)例分析了javascript使用object類定義對象及屬性的用法,需要的朋友可以參考下2015-03-03
Javascript 異步加載詳解(瀏覽器在javascript的加載方式)
本文總結(jié)一下瀏覽器在 javascript 的加載方式,需要的朋友可以參考下2012-05-05
原生javascript單例模式的應(yīng)用實(shí)例分析
這篇文章主要介紹了原生javascript單例模式的應(yīng)用,結(jié)合實(shí)例形式分析了JavaScript單例模式的基本功能、原理、應(yīng)用及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
每天一篇javascript學(xué)習(xí)小結(jié)(Array數(shù)組)
這篇文章主要介紹了javascript中的Array數(shù)組知識點(diǎn),對數(shù)組的基本使用方法,以及各種方法進(jìn)行整理,感興趣的小伙伴們可以參考一下2015-11-11
JS中循環(huán)遍歷數(shù)組的四種方式總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于JS中循環(huán)遍歷數(shù)組的四種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

