🧩 环境切换像魔术!揭秘汇丰前端项目中的「一键多环境切换术」!
你还在手动改
.env吗?你还在发错版本连到生产数据库被罚咖啡钱吗?
别慌,今天带你复刻汇丰前端项目中的环境魔法术,让你的项目一键切换test1 / test2 / QA / 生产,绝不手抖!
✅ 写这篇的原因
在银行、券商、支付等系统中,同一个前端项目往往要对接多个后端环境:
- 测试1环境(test1)
- 测试2环境(test2)
- QA验收环境(qa)
- 预发环境(staging)
- 生产环境(production)
每次改 .env / 重启服务 / 改包名是不是让你苦不堪言?
汇丰的解决方案是:前端打包后还能“切换后端地址” !本文就手把手带你实现它。
🧰 技术选型
| 技术 | 用途 |
|---|---|
| Vite | 构建工具,支持动态注入环境变量 |
| Naive UI | 前端切换器 UI 展示 |
| localStorage | 本地存储当前环境 |
| Axios | 根据当前环境请求后端 |
🧱 项目结构(简化)
src/
├── config/
│ └── envMap.ts # 所有后端环境映射表
├── utils/
│ └── request.ts # axios 封装
├── App.vue
├── main.ts
🧪 实战代码:核心功能复刻
1️⃣ 配置多环境地址映射(envMap.ts)
export const envMap = {
test1: 'https://api-test1.hsbc.com',
test2: 'https://api-test2.hsbc.com',
qa: 'https://api-qa.hsbc.com',
prod: 'https://api.hsbc.com'
}
export const getBaseUrl = () => {
const env = localStorage.getItem('env') || 'test1'
return envMap[env]
}
2️⃣ axios 请求封装(request.ts)
import axios from 'axios'
import { getBaseUrl } from '@/config/envMap'
const request = axios.create({
baseURL: getBaseUrl(),
timeout: 8000
})
export default request
3️⃣ 切换环境组件(EnvSwitcher.vue)
<template>
<n-select :options="options" v-model:value="currentEnv" @update:value="changeEnv" />
</template>
<script setup>
import { envMap } from '@/config/envMap'
import { useMessage } from 'naive-ui'
const message = useMessage()
const currentEnv = ref(localStorage.getItem('env') || 'test1')
const options = Object.keys(envMap).map(key => ({ label: key, value: key }))
const changeEnv = (env) => {
localStorage.setItem('env', env)
message.success(`🔁 环境切换为:${env},即将刷新`)
setTimeout(() => window.location.reload(), 500)
}
</script>
4️⃣ 页面调用接口自动走当前环境
import request from '@/utils/request'
request.get('/account/info').then(res => {
console.log('账户信息:', res.data)
})
🖥️ 使用效果展示
✅ 页面右上角点击“test2”
✅ 项目自动保存切换环境并刷新
✅ 所有请求走对应后端地址
✅ 本地开发、打包后部署都支持切换!
🎉 彩蛋:上线后还能切换?
可以!方法如下:
window.HSBC_ENV = 'test2' // 页面挂载变量
然后在 request.ts 中优先判断:
const env = (window as any).HSBC_ENV || localStorage.getItem('env') || 'test1'
👉 上线后只需修改 HTML 注入变量,即可“远程操控”环境,避免重新构建!
⚠️ 易错点总结
| 错误点 | 描述 |
|---|---|
| ❌ Vite 构建时将 baseURL 固定死 | 导致无法切换 |
| ❌ 页面刷新后丢失环境配置 | 没有用 localStorage 持久化 |
| ❌ 环境 key 写死在代码中 | 不好扩展,建议统一从 envMap 动态生成选项 |
✅ 最佳实践:
- 环境变量统一抽象
- 页面展示 + 持久化 + 动态刷新一条龙
- 打包时支持预配置默认值(如默认走
test1)
🎯 总结
- 复刻汇丰前端多环境切换机制
- 用 Vite + Axios + localStorage 构建了灵活可控的环境系统
- 支持打包后动态切换后端地址,适用于复杂测试流程