uni-app項(xiàng)目實(shí)現(xiàn)多服務(wù)環(huán)境切換的詳細(xì)教程
前情
uni-app是我比較喜歡的跨平臺(tái)框架,它能開(kāi)發(fā)小程序/H5/APP(安卓/iOS),重要的是對(duì)前端開(kāi)發(fā)友好,自帶的IDE可視化的運(yùn)行和打包也讓開(kāi)發(fā)體驗(yàn)也非常棒,公司項(xiàng)目就是主推uni-app,現(xiàn)在我的開(kāi)發(fā)模式是用HBuilder X跑項(xiàng)目,寫(xiě)代碼是用的cursor,不是通過(guò)命令行方式啟動(dòng)和打包項(xiàng)目的
什么場(chǎng)景需要做多環(huán)境切換?
對(duì)于客戶(hù)服務(wù)器模式 (Client–server model)的項(xiàng)目,應(yīng)該都會(huì)有測(cè)試環(huán)境和生產(chǎn)環(huán)境的,有的專(zhuān)業(yè)一點(diǎn)的還會(huì)有灰度模式,目前我負(fù)責(zé)的項(xiàng)目是一個(gè)跨端小程序項(xiàng)目,只有測(cè)試服和生產(chǎn)服,通過(guò)自帶的環(huán)境變量是可以做到服務(wù)環(huán)境切換的
但現(xiàn)在有這么一個(gè)情況,最近在和服務(wù)端聯(lián)調(diào)的時(shí)候發(fā)現(xiàn)服務(wù)端接口問(wèn)題較多,好幾個(gè)接口調(diào)了一下午還是報(bào)錯(cuò),服務(wù)端跟我說(shuō)能不能直接連他本地的環(huán)境,他也就不用老是發(fā)版了,也就是說(shuō)需要增加一個(gè)本地服務(wù)的環(huán)境
基礎(chǔ)版:測(cè)試服和生產(chǎn)服環(huán)境切換
在使用HBuilder X運(yùn)行項(xiàng)目和打包項(xiàng)目都會(huì)有注入環(huán)境變量process.env.NODE_ENV,根據(jù)它能判斷當(dāng)前運(yùn)行還是打包項(xiàng)目,示例代碼如下,此方式可以滿足大多數(shù)保只有測(cè)試和生產(chǎn)環(huán)境的項(xiàng)目
export const TEST_BASE_URL = 'https://api-test.com'; // 測(cè)試服地址 export const ONLINE_BASE_URL = 'https://api-prod.com'; // 正式服地址 // 根據(jù)環(huán)境變量切換是走正式服還是測(cè)試服 const createBaseUrl = () => { // 開(kāi)發(fā)環(huán)境 if (process.env.NODE_ENV === "development") { return TEST_BASE_URL; } else { // 生產(chǎn)環(huán)境 return ONLINE_BASE_URL; } }
測(cè)試服和生產(chǎn)服環(huán)境、本地環(huán)境切換
對(duì)于HBuilder X跑的項(xiàng)目,不像web或者H5等通過(guò)命令行跑起的項(xiàng)目,如果是使用命令行跑起的項(xiàng)目,你可以在命令行后面注入環(huán)境變量來(lái)達(dá)到多環(huán)境的切換
丐版實(shí)現(xiàn):
最精暴的實(shí)現(xiàn)方式是直接通過(guò)注釋打開(kāi)關(guān)閉的方式實(shí)現(xiàn)服務(wù)環(huán)境切換,關(guān)鍵代碼如下:
// export const TEST_BASE_URL = 'https://api-test.com'; // 測(cè)試服地址 export const TEST_BASE_URL = 'https://api-local.com'; // 本地服務(wù)地址 export const ONLINE_BASE_URL = 'https://api-prod.com'; // 正式服地址 // 根據(jù)環(huán)境變量切換是走正式服還是測(cè)試服 const createBaseUrl = () => { // 開(kāi)發(fā)環(huán)境 if (process.env.NODE_ENV === "development") { return TEST_BASE_URL; } else { // 生產(chǎn)環(huán)境 return ONLINE_BASE_URL; } }
優(yōu)化版實(shí)現(xiàn):
官方提供了別的方式注入環(huán)境變量,在根目錄下package.json里增加配置即可,如果你項(xiàng)目沒(méi)有此文件新建一個(gè)即可,你可以通過(guò)運(yùn)行npm init -y快速生成package.json,配置關(guān)鍵代碼如下:
{ ... "uni-app": { "scripts": { "alipay-test": { "title": "支付寶小程序 本地環(huán)境", "env": { "UNI_PLATFORM": "mp-alipay", "TYPE": "local" } } } }, ... }
服務(wù)切換關(guān)鍵代碼如下:
export const TEST_BASE_URL = 'https://api-test.com'; // 測(cè)試服地址 export const LOCAL_BASE_URL = 'https://api-local.com'; // 本地服務(wù)地址 export const ONLINE_BASE_URL = 'https://api-prod.com'; // 正式服地址 // 根據(jù)環(huán)境變量切換是走正式服還是測(cè)試服 const createBaseUrl = () => { // 開(kāi)發(fā)運(yùn)行環(huán)境 if (process.env.NODE_ENV === "development") { if (process.env.name === 'local') { return LOCAL_BASE_URL; } return TEST_BASE_URL; } else { // 打包運(yùn)行環(huán)境切換 if (process.env.name === 'local') { return LOCAL_BASE_URL; } // 生產(chǎn)環(huán)境 return ONLINE_BASE_URL; } }
配置好上面信息后,HBuilder X會(huì)在運(yùn)行和發(fā)布命令下增加配置好的打包和發(fā)布入口,如下圖:
至此,當(dāng)前項(xiàng)目不但可以做到測(cè)試環(huán)境切服務(wù),生成環(huán)境一樣可以切服務(wù),其實(shí)上面的配置在注入環(huán)境變量的同時(shí),同時(shí)注入了uni-app特有的條件編譯代碼
官方文擋:package.json | uni-app官網(wǎng)
注意
官方提供自定義環(huán)境變量注入的方式,只支持H5和小程序平臺(tái),不支持APP,查閱了官方文擋,并沒(méi)有發(fā)現(xiàn)怎么在APP端注入環(huán)境變量,如果有知道的,希望不吝分享,一起學(xué)習(xí)一起進(jìn)步
以上就是uni-app項(xiàng)目實(shí)現(xiàn)多服務(wù)環(huán)境切換的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于uni-app多服務(wù)環(huán)境切換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
簡(jiǎn)單了解TypeScript中如何繼承 Error 類(lèi)
這篇文章主要介紹了簡(jiǎn)單了解TypeScript中如何繼承 Error 類(lèi),一個(gè)典型的網(wǎng)站服務(wù)器可能需要有 NetworkError, DatabaseError, UnauthorizedError 等。 我們希望這些類(lèi)都擁有 Error 的特性:有錯(cuò)誤消息、有調(diào)用棧、有方便打印的 toString 等。,需要的朋友可以參考下2019-06-06微信小程序按鈕點(diǎn)擊動(dòng)畫(huà)效果的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序按鈕點(diǎn)擊動(dòng)畫(huà)效果的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09JS/HTML5游戲常用算法之碰撞檢測(cè) 包圍盒檢測(cè)算法詳解【圓形情況】
這篇文章主要介紹了JS/HTML5游戲常用算法之碰撞檢測(cè) 包圍盒檢測(cè)算法,結(jié)合實(shí)例形式詳細(xì)分析了圓形包盒情況下的碰撞檢測(cè)算法相關(guān)原理與實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-12-12JavaScript字符和ASCII實(shí)現(xiàn)互相轉(zhuǎn)換
這篇文章主要介紹了JavaScript字符和ASCII實(shí)現(xiàn)互相轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06uniapp小程序點(diǎn)擊輸入框時(shí)阻止彈出軟鍵盤(pán)的幾種解決方案
在寫(xiě)項(xiàng)目時(shí)候需要在表單里面加一個(gè)picker選擇器,但選擇input的時(shí)候軟鍵盤(pán)與選擇器會(huì)同時(shí)彈出,下面這篇文章主要給大家介紹了關(guān)于uniapp小程序點(diǎn)擊輸入框時(shí)阻止彈出軟鍵盤(pán)的幾種解決方案,需要的朋友可以參考下2024-02-02JavaScript實(shí)現(xiàn)計(jì)算字符串中出現(xiàn)次數(shù)最多的字符和出現(xiàn)的次數(shù)
這篇文章主要介紹了JavaScript實(shí)現(xiàn)計(jì)算字符串中出現(xiàn)次數(shù)最多的字符和出現(xiàn)的次數(shù),本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03JS實(shí)現(xiàn)網(wǎng)站菜單拖拽移位效果的方法
這篇文章主要介紹了JS實(shí)現(xiàn)網(wǎng)站菜單拖拽移位效果的方法,涉及JavaScript動(dòng)態(tài)操作頁(yè)面元素樣式的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09