uni-app項目怎么實現多服務環境切換

前情

uni-app是我比較喜歡的跨平臺框架,它能開發小程序/H5/APP(安卓/iOS),重要的是對前端開發友好,自帶的IDE可視化的運行和打包也讓開發體驗也非常棒,公司項目就是主推uni-app,現在我的開發模式是用HBuilder X跑項目,寫代碼是用的cursor,不是通過命令行方式啟動和打包項目的

什么場景需要做多環境切換?

對于客戶服務器模式 (Client–server model)的項目,應該都會有測試環境和生產環境的,有的專業一點的還會有灰度模式,目前我負責的項目是一個跨端小程序項目,只有測試服和生產服,通過自帶的環境變量是可以做到服務環境切換的

但現在有這么一個情況,最近在和服務端聯調的時候發現服務端接口問題較多,好幾個接口調了一下午還是報錯,服務端跟我說能不能直接連他本地的環境,他也就不用老是發版了,也就是說需要增加一個本地服務的環境

基礎版:測試服和生產服環境切換

在使用HBuilder X運行項目和打包項目都會有注入環境變量process.env.NODE_ENV,根據它能判斷當前運行還是打包項目,示例代碼如下,此方式可以滿足大多數保只有測試和生產環境的項目

export const TEST_BASE_URL = 'https://api-test.com'; // 測試服地址
export const ONLINE_BASE_URL = 'https://api-prod.com'; //  正式服地址// 根據環境變量切換是走正式服還是測試服
const createBaseUrl = () => {// 開發環境if (process.env.NODE_ENV  === "development") {return TEST_BASE_URL;} else {// 生產環境return ONLINE_BASE_URL;}
}

測試服和生產服環境、本地環境切換

對于HBuilder X跑的項目,不像web或者H5等通過命令行跑起的項目,如果是使用命令行跑起的項目,你可以在命令行后面注入環境變量來達到多環境的切換

丐版實現:

最精暴的實現方式是直接通過注釋打開關閉的方式實現服務環境切換,關鍵代碼如下:

// export const TEST_BASE_URL = 'https://api-test.com'; // 測試服地址
export const TEST_BASE_URL = 'https://api-local.com'; // 本地服務地址
export const ONLINE_BASE_URL = 'https://api-prod.com'; //  正式服地址// 根據環境變量切換是走正式服還是測試服
const createBaseUrl = () => {// 開發環境if (process.env.NODE_ENV  === "development") {return TEST_BASE_URL;} else {// 生產環境return ONLINE_BASE_URL;}
}

優化版實現:

官方提供了別的方式注入環境變量,在根目錄下package.json里增加配置即可,如果你項目沒有此文件新建一個即可,你可以通過運行npm init -y快速生成package.json,配置關鍵代碼如下:

{..."uni-app": {"scripts": {"alipay-test": {"title": "支付寶小程序 本地環境","env": {"UNI_PLATFORM": "mp-alipay","TYPE": "local"}}}},...
}

服務切換關鍵代碼如下:

export const TEST_BASE_URL = 'https://api-test.com'; // 測試服地址
export const LOCAL_BASE_URL = 'https://api-local.com'; // 本地服務地址
export const ONLINE_BASE_URL = 'https://api-prod.com'; //  正式服地址// 根據環境變量切換是走正式服還是測試服
const createBaseUrl = () => {// 開發運行環境if (process.env.NODE_ENV  === "development") {if (process.env.name === 'local') { return LOCAL_BASE_URL;}return TEST_BASE_URL;} else {// 打包運行環境切換if (process.env.name === 'local') { return LOCAL_BASE_URL;}// 生產環境return ONLINE_BASE_URL;}
}

配置好上面信息后,HBuilder X會在運行和發布命令下增加配置好的打包和發布入口,如下圖:

請添加圖片描述

至此,當前項目不但可以做到測試環境切服務,生成環境一樣可以切服務,其實上面的配置在注入環境變量的同時,同時注入了uni-app特有的條件編譯代碼

官方文擋:package.json | uni-app官網

注意

官方提供自定義環境變量注入的方式,只支持H5和小程序平臺,不支持APP,查閱了官方文擋,并沒有發現怎么在APP端注入環境變量,如果有知道的,希望不吝分享,一起學習一起進步

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86747.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86747.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86747.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

論文閱讀:強化預訓練

大型語言模型 (LLMs) 的驚人能力很大程度上歸功于在海量文本語料庫上進行下一詞元預測 (Next-Token Prediction, NTP) 的規模化訓練。與此同時,強化學習 (Reinforcement Learning, RL) 已成為微調 LLMs、使其與人類偏好對齊或增強特定技能(如復雜推理&am…

Java 大視界——Java大數據在智能安防視頻監控中的異常事件快速響應與處理機制

??摘要:?? 在智慧城市和工業4.0浪潮下,智能安防系統日均產生PB級視頻流數據。如何在實時性、準確性、成本三者間取得平衡,成為行業核心挑戰。本文將深入探討??Java技術棧在大規模視頻分析系統中的核心作用??:基于FlinkJav…

華為云Flexus+DeepSeek征文| 基于Dify-LLM平臺應用實踐:創建智能知識庫問答助手

華為云FlexusDeepSeek征文| 基于Dify-LLM平臺應用實踐:創建智能知識庫問答助手 前言一、相關名詞介紹1.1 華為云Flexus X實例介紹1.2 華為云ModelArts Studio介紹 二、本次實踐介紹2.1 本次實踐環境介紹2.2 Dify平臺介紹 三、搭建Dify-LLM開發平臺3.1 進…

Spark on yarn的作業提交流程

一、YarnClient 二、YarnCluster 三、詳細描述 客戶端(Client)通過YARN的ResourceManager提交應用程序。在此過程中,客戶端進行權限驗證,生成Job ID和資源上傳路徑,并將這些信息返回給客戶端。客戶端將jar包、配置…

MySQL 主從復制與一主多從架構實戰詳解

文章目錄 一、MySQL 主從復制的本質原理 數據同步流程: 主從復制三大線程: 二、主從復制的三種模式 三、一主多從架構設計與應用 應用場景: 優勢: 四、單機模擬主從復制(實戰配置) 環境準備&#xff1a…

分布式光纖測溫及紅外測溫系統的區別?

在現代工業監控系統中,溫度監測是保障設備安全運行的關鍵環節。分布式光纖測溫(DTS)和紅外測溫(IR)是兩種常見的溫度監測技術。 本文將介紹這兩種技術的原理、優勢以及應用場景的區別。 光纖測溫技術的原理是利用光纖…

sql優化:使用 exists 優化 in () 或 = ()

1、使用 exists 優化 in () 優化前: select id, order_no, apply_time, apply_dept, apply_operator, purpose, stage, remark from BranchWarehouseApplyMaster where stage 0 and warehouse_id 1 and apply_dept in ( select emp_DeptID from Employee where …

HTTP 響應狀態碼

HTTP 響應狀態碼(Response Status Codes) HTTP 響應狀態碼用于表示服務器對客戶端請求的處理結果,由3位數字 組成,分為5類: 狀態碼 類別 常見狀態碼 說明 1xx 信息響應 100(Continue) …

如何通過插件系統打造個性化效率工作流

在現代工作流中,快速調用工具與自動化操作已成為提升生產力的核心環節。一款真正出色的效率工具,不僅要在響應速度和跨平臺兼容性上表現出色,更需要具備高度的可擴展性,以滿足多樣化的使用場景。 它不僅輕量高效,還支…

Spring上下文模塊設計

經過此前我們設計的如:IoC、Web、數據訪問、AOP等模塊的設計,我們從設計上已經搭建好了Spring的基礎骨架了,但聰明的碼友會思考想到:作為一個基礎框架而言,目前應該是已經夠用了的,但是上進的碼友怎么會就此…

keil5怎么關閉工程

在project里面有一個close project,點擊后就關掉了,之前還按照其他軟件的操作習慣,右鍵工程選項,但是始終沒有發現關閉選項。

騰訊云:6月30日起,自動禁用,及時排查

大家好,我是小悟。 騰訊云發布公告,宣布從2025年6月30日開始,對長期未使用的AccessKey(API訪問密鑰)進行自動禁用。 簡單來說,如果你的密鑰在90天內沒動靜,系統就會把它關掉,不管是…

【C++】多重繼承與虛繼承

多重繼承與虛繼承 1.單繼承和多重繼承的區別2.語法規則示例代碼:多重繼承子類指定父類的構造示例代碼:多重繼承子類隱藏父類的同名方法 3.虛繼承解決多重繼承遇到的bug示例代碼:環狀繼承引發的問題 3.1 虛基類:3.2 語法規則&#…

GCC編譯/連接/優化等選項

1. GCC編譯/連接/優化等選項 1. GCC編譯/連接/優化等選項 1.1. 簡介1.2. 常用選項 1.2.1. -c -E -S -o1.2.2. -L<path> -l<library>1.2.3. -D<macro>1.2.4. -I<path> 1.3. 代碼生成和優化 1.3.1. -std<standard>1.3.2. -shared1.3.3. -fPIC1.3.…

FFmpeg 壓縮視頻文件

文章目錄 FFmpeg 壓縮視頻文件基本壓縮命令&#xff08;保持 MP4 格式&#xff09;轉換為其他格式示例&#xff1a;關鍵參數說明&#xff1a;額外優化選項&#xff1a; 在FFmpeg中使用多線程加速1. 幀級多線程 (frame-level multithreading)2. 切片級多線程 (slice-level multi…

Ubuntu 系統通過防火墻管控 Docker 容器

Ubuntu 系統通過防火墻管控 Docker 容器指南 一、基礎防火墻配置 # 啟用防火墻 sudo ufw enable# 允許 SSH 連接&#xff08;防止配置過程中斷聯&#xff09; sudo ufw allow 22/tcp二、Docker 配置調整 # 編輯 Docker 配置文件 sudo vim /etc/docker/daemon.json配置文件內…

虛擬機新增硬盤,與數據掛載

我有個虛擬機&#xff0c;當時選擇了獨立文件&#xff0c;現在遇到個問題&#xff0c;硬盤不夠了&#xff0c;索性加了一個新硬盤&#xff0c;現在想把數據庫的數據映射到這個新的硬盤處理。 羅列硬盤 lsblk我得是sdb是新硬盤 2. 分區 sudo fdisk /dev/sdb交互操作&#xff…

go語言學習 第10章:面向對象編程

第10章&#xff1a;面向對象編程 面向對象編程&#xff08;OOP&#xff09;是一種編程范式&#xff0c;它使用“對象”來表示數據和方法&#xff0c;并通過類來定義對象的結構和行為。Go語言雖然不是傳統的面向對象語言&#xff0c;但它通過結構體&#xff08;struct&#xff…

android計算器代碼

本次作業要求實現一個計算器應用的基礎框架。以下是布局文件的核心代碼&#xff1a; <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"andr…

Go 語言接口詳解

Go 語言接口詳解 核心概念 接口定義 在 Go 語言中&#xff0c;接口是一種抽象類型&#xff0c;它定義了一組方法的集合&#xff1a; // 定義接口 type Shape interface {Area() float64Perimeter() float64 } 接口實現 Go 接口的實現是隱式的&#xff1a; // 矩形結構體…