优化小程序环境切换方案,让测试发版更轻松

Daotin 于 2025-01-21 发布 编辑

今天跟大家分享一个实际工作中遇到的小程序环境切换问题。相信做过小程序开发的同学都遇到过这样的困扰:每次发布都要重复切换环境、重新打包、重新上传…搞得测试和发版效率特别低。今天我们就来聊聊如何优化这个过程。

现状分析

目前我们的 uniapp 小程序项目在测试发版时是这样的流程:

  1. 修改 baseUrl 为 test 环境
  2. 打包上传到微信小程序后台
  3. 设置为体验版供测试人员验证
  4. 测试通过后,再改回 prod 环境的地址
  5. 重新打包上传
  6. 最后提交审核

看到这个流程,你是不是也觉得特别繁琐?每次改个小功能都要这么折腾,时间都浪费在重复的打包上传上了。那么,有没有更好的方式呢?

常见解决方案探索

作为一个有追求的程序员,我首先想到的是参考 Vue 项目的环境变量配置方案。在 Vue 项目中,我们可以通过环境变量来自动选择不同环境的后端接口。所以我找到了uni.getAccountInfoSync().miniProgram.envVersion这个 API,想通过判断小程序的版本环境来自动切换 baseUrl。

然而研究后发现,这个方案行不通。原因是小程序在审核时期,envVersion 的值是’develop’,这个问题官方一直没有解决。也就是说,我们无法准确判断当前是审核环境还是正式环境,这条路走不通。

折中方案:使用 uniapp 自定义发行

在寻找最终方案的过程中,我们还尝试过一个相对折中的方案 - 使用 uniapp 提供的自定义发行功能。这个方案虽然还是需要打两次包,但至少不用手动修改源代码了。

具体做法是在 package.json 中配置不同环境的打包命令:

{
	"uni-app": {
		"scripts": {
			"wx-dev": {
				"title": "微信小程序-dev",
				"env": {
					"UNI_PLATFORM": "mp-weixin",
					"NAME": "develop"
				},
				"define": {
					"DEV-SERVER": true
				}
			},
			"wx-test": {
				"title": "微信小程序-test",
				"env": {
					"UNI_PLATFORM": "mp-weixin",
					"NAME": "trial"
				},
				"define": {
					"TEST-SERVER": true
				}
			},
			"wx-prod": {
				"title": "微信小程序-prod",
				"env": {
					"UNI_PLATFORM": "mp-weixin",
					"NAME": "release"
				},
				"define": {
					"PROD-SERVER": true
				}
			}
		}
	}
}

然后在项目中使用条件编译来设置不同环境的 baseUrl:

let aptBaseUrl = ''
//#ifdef PROD-SERVER
aptBaseUrl = '<http://xx.xx.xx.xxx:8888/>'
//#endif

//#ifdef TEST-SERVER
aptBaseUrl = '<http://yy.yy.yy.yy:9999/>'
//#endif

这种方案的优点是:

  1. 不需要手动修改源代码中的 baseUrl
  2. 通过命令就能打包出对应环境的版本
  3. 配置灵活,易于维护

缺点是:

  1. 依然需要打两次包(测试包和正式包)
  2. 上传小程序管理后台的步骤没有减少

虽然这个方案没有完全解决我们的问题,但相比之前手动改 baseUrl 的方式还是更好的。不过,如果想要彻底解决重复打包的问题,我们还需要寻找更好的方案。

最终解决方案

经过反复研究和测试,最终我想到了一个既简单又实用的方案 - 在小程序内部做一个环境切换的功能。具体是这样的:

  1. 默认使用生产环境的接口地址
  2. 在个人中心页面增加一个环境切换开关
  3. 通过代码控制只对特定的测试账号显示这个开关
  4. 切换环境后,在本地存储(Storage)中记录当前环境
  5. 提示用户重启小程序使配置生效
  6. 下次启动时,自动读取存储的环境配置

这样的设计有几个关键点:

方案优势与注意事项

这个方案最大的好处是:测试人员可以在同一个包里随时切换环境进行测试,测试通过后直接提审,不需要重新打包上传。这样不仅节省了开发和测试的时间,还降低了因重复打包可能带来的风险。

不过在实施这个方案时也要注意几点:

  1. 测试账号要严格控制,避免正式用户看到切换按钮
  2. 环境切换后一定要重启小程序,确保所有 API 请求都使用新的 baseUrl
  3. 建议在界面上清晰地显示当前环境,防止测试人员混淆

这个方案虽然简单,但确实解决了我们的实际问题。有时候解决方案不一定要多么高大上,能够切实解决问题、提高效率才是最重要的。