前情

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端注入环境变量,如果有知道的,希望不吝分享,一起学习一起进步

uni-app项目怎么实现多服务环境切换的更多相关文章

  1. 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境

    一.环境描述 安装有ansible的服务器:192.168.13.45 测试环境服务器:192.168.13.49 /home/app/api-tomcat/webapps/api.war为测试环境新 ...

  2. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  3. 移动APP项目研发流程及版本规划(转)

    一个移动APP项目研发规模可大可小,但都离不开以下几个成员:产品经理.ui设计师.前端开发.后端开发.测试等.如何合理安排项目成员工作.确保项目顺利进行呢?一个清晰合理的项目研发流程控制很重要. 项目 ...

  4. 尝试利用CentOS环境安装LiteSpeed WEB服务环境的过程

    对于普通的网站搭建的环境虚拟主机就足够使用,不过近期公司的网站需要上线VPS主机,于是采用到LNMP(http://lnmp.org/)一键包安装的,运行还是比较好的,这不最近我也开始尝试接触VPS方 ...

  5. SharePoint Server 2013开发之旅(三):为SharePoint Server配置App开发、部署、管理环境

    上一篇我讲解了如何利用微软提供的Office 365开发人员网站,进行在线的SharePoint App开发,这当然是不错的一个选择,因为你可以快速地进行开发和调试.(仅仅针对App开发而言).但是, ...

  6. 到底为什么你的APP项目烂尾了?

    你正在经历迷茫.纠结,或者愤怒.痛苦的情绪,因为,你的APP项目已经或将要烂尾了. 目前的状况只有3种: 项目一直拖到现在,并且很可能继续拖下去 项目在开发期间不断上涨成本 项目完成,BUG多多,不能 ...

  7. 项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

    上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点 ...

  8. App项目升级Xcode7&iOS9(续) - This bundle is invalid. The bundle identifier contains disallowed characters

    金田 iOS 9发布已经有2月有余,现在Xcode已经有升级到Xcode7.1,开发环境安装等一系列相关的流程,以及Xcode 7 & iOS 9升级相关的一些部分,在这里就不再多加赘述(详见 ...

  9. 搭建PhoneCat项目的开发与测试环境

    AngularJS官方网站提供了一个用于学习的示例项目:PhoneCat.这是一个Web应用,用户可以浏览一些Android手机,了解它们的详细信息,并进行搜索和排序操作. 获取源代码 PhoneCa ...

  10. Vue2 全家桶仿 微信App 项目,支持多人在线聊天和机器人聊天

    前言 这个项目是利用工作之余写的一个模仿微信app的单页面应用,整个项目包含27个页面,涉及实时群聊,机器人聊天,同学录,朋友圈等等,后续页面还是开发中.写这个项目主要目的是练习和熟悉vue和vuex ...

随机推荐

  1. iterm2配置ssh自动登录

    iterm2 ssh 演示 cmd + o 打开服务器列表,方向键选择要登录的机器,回车,提示输入密码: option + cmd + f 打开密码管理器,方向键选择密码,回车,即可登录:(这一步通过 ...

  2. 在 Go 中恰到好处的内存对齐

    问题 type Part1 struct { a bool b int32 c int8 d int64 e byte } 在开始之前,希望你计算一下 Part1 共占用的大小是多少呢? func m ...

  3. 容器到底是个啥?(附Docker学习资源汇总)

    目录Docker与容器    初识容器与Docker    为什么要使用Docker    Docker优势简介Docker核心概念    Docker客户端和服务器    Docker镜像    D ...

  4. Docker中在不同网段下的容器的互联

    首先要启动docker: 拉取busybox镜像: 查看本地是否有这个镜像的命令是: 接下来咱们就要来查询docker的网络: 你会看到一个docker0 这是docker默认的网段,在docker里 ...

  5. CentOS 7 下 Docker 的离线安装方法

    现遇到部分学校提供的服务器并没有外网连接,故需要在断网条件下安装 Docker ,本贴简述断网安装 Docker 的方法. 去 Docker 或者相关镜像源中下载 Docker RPM 包,以下链接的 ...

  6. Python科学计算系列3—多项式操作

    1.因式分解 例1:分解下列多项式 代码如下: from sympy import symbols, factor x, y = symbols('x y') f = 3 * x ** 4 - 2 * ...

  7. 🎀SQL注入拦截工具-动态order by

    简介 业务场景经常会存在动态order by 入参情况,在处理动态 order by 参数时,需要防止SQL注入攻击.SQL注入是一种常见的安全漏洞,攻击者可以通过这种手段操纵查询来执行恶意代码. 措 ...

  8. Web前端入门第 34 问:CSS 常见布局

    Web 网页中,所有元素都是盒模型构成的,一个大盒子套一个或者多个小盒子,再用更大的盒子把大盒子给圈起来,这就构成了基本的 HTML 结构,再利用 CSS 把盒子装修得好看一些,最后把它放在正确位置, ...

  9. CTF实验吧认真一点 SQL盲注

    实验吧地址 http://ctf5.shiyanbar.com/web/earnest/index.php 很明显的返回两个不同得页面,判断为SQL盲注 并且 过滤了敏感字符 测试的时候还发现过滤了s ...

  10. “Pocket Flow,一个仅用 100 行代码实现的 LLM 框架”

    PocketFlow介绍 PocketFlow是我最近在探索的一个LLM 框架,我觉得很有意思,因此推荐给大家. 这个框架最大的特点就是:"Pocket Flow,一个仅用 100 行代码实 ...