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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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; // 矩形结构体…