在 uniapp 開發企業微信小程序時,區分生產環境和測試環境是常見需求。以下是幾種可靠的方法,幫助你根據環境處理不同的服務請求:
一、通過條件編譯區分(推薦)
使用 uniapp 的 條件編譯 語法,在代碼中標記不同環境的配置。
1. 在 manifest.json
中定義環境變量
{"app-plus": {"debug": {"env": "dev"},"release": {"env": "prod"}}
}
2. 創建配置文件
// env.js
const config = {// 測試環境dev: {baseUrl: 'https://test-api.example.com',apiKey: 'test-key'},// 生產環境prod: {baseUrl: 'https://api.example.com',apiKey: 'prod-key'}
};// 根據條件編譯獲取當前環境
const env = process.env.NODE_ENV === 'production' ? 'prod' : 'dev';export default config[env];
3. 在請求中使用配置
import config from './env.js';function request(options) {return uni.request({url: config.baseUrl + options.url,method: options.method || 'GET',data: options.data,header: {'Authorization': `Bearer ${config.apiKey}`}});
}
二、使用自定義環境變量(更靈活)
在 package.json
中定義不同環境的啟動命令。
1. 修改 package.json
{"scripts": {"dev": "cross-env NODE_ENV=development uni-app-cli dev","prod": "cross-env NODE_ENV=production uni-app-cli build"}
}
2. 創建環境配置文件
// env.config.js
const env = process.env.NODE_ENV || 'development';const config = {development: {baseUrl: 'https://test-api.example.com',debug: true},production: {baseUrl: 'https://api.example.com',debug: false}
};export default config[env];
3. 在請求攔截器中使用
import config from './env.config.js';uni.addInterceptor('request', {invoke(args) {// 動態替換 URLif (!args.url.startsWith('http')) {args.url = config.baseUrl + args.url;}// 添加環境標識args.header['X-Env'] = config.env;return args;}
});
三、企業微信特有的環境區分
利用企業微信的 AgentId 或 企業ID 區分環境。
1. 在企業微信管理后臺配置
- 測試環境:創建一個測試用的應用,獲取測試 AgentId。
- 生產環境:使用正式應用的 AgentId。
2. 在代碼中判斷
// 獲取當前企業微信環境信息
wx.qy.getAgentInfo({success: (res) => {const isProd = res.agentid === 'YOUR_PROD_AGENTID';const baseUrl = isProd ? 'https://api.example.com' : 'https://test-api.example.com';// 根據環境設置請求URLuni.request({url: baseUrl + '/api/data',// ...});}
});
四、通過 URL 參數區分(適合開發調試)
在開發時,通過 URL 參數強制指定環境。
1. 在入口頁面獲取參數
onLoad(query) {// 通過 ?env=test 或 ?env=prod 控制環境const env = query.env || (process.env.NODE_ENV === 'production' ? 'prod' : 'dev');// 設置全局環境變量uni.$globalData.env = env;
}
2. 在請求中使用
function request(options) {const env = uni.$globalData.env;const baseUrl = env === 'prod' ? 'https://api.example.com' : 'https://test-api.example.com';return uni.request({url: baseUrl + options.url,// ...});
}
五、結合本地存儲(持久化環境選擇)
允許用戶在應用內切換環境,并保存到本地存儲。
1. 創建環境切換功能
// 環境切換組件
<template><view><radio-group @change="switchEnv"><radio :checked="env === 'dev'" value="dev">測試環境</radio><radio :checked="env === 'prod'" value="prod">生產環境</radio></radio-group></view>
</template><script>
export default {data() {return {env: uni.getStorageSync('appEnv') || 'dev'};},methods: {switchEnv(e) {const env = e.detail.value;uni.setStorageSync('appEnv', env);uni.reLaunch({ url: '/' }); // 重啟應用使環境生效}}
};
</script>
2. 在請求中讀取環境
const env = uni.getStorageSync('appEnv') || 'dev';
const baseUrl = env === 'prod' ? 'https://api.example.com' : 'https://test-api.example.com';
最佳實踐建議
-
推薦組合方案:
- 開發/生產環境:通過
process.env.NODE_ENV
區分。 - 企業微信環境:結合 AgentId 或企業 ID 驗證。
- 調試靈活性:支持 URL 參數或本地存儲切換。
- 開發/生產環境:通過
-
安全性考慮:
- 敏感配置(如 API 密鑰)應放在服務端,避免在前端硬編碼。
- 測試環境數據與生產環境隔離,避免數據污染。
-
請求攔截器:
統一在請求攔截器中處理環境配置,避免在每個請求中重復判斷。 -
日志區分:
在測試環境輸出詳細日志,生產環境減少日志輸出。
通過以上方法,你可以在 uniapp 企業微信小程序中靈活區分環境,確保開發、測試和生產流程的穩定性。
更新最新使用代碼-更新時間:2025年6月3日
在 UniApp 中通過 uni.getAccountInfoSync()
獲取的 miniProgram.envVersion
字段,返回的是當前小程序的運行環境版本,其值及對應的環境如下:
各環境對應的值
值 | 對應的環境 | 說明 |
---|---|---|
'develop' | 開發環境 | 開發者在本地工具(如微信開發者工具)中直接運行的環境。 |
'trial' | 體驗版(測試環境) | 通過微信開發者工具上傳的體驗版,或企業微信后臺發布的測試版本。 |
'release' | 正式版(生產環境) | 通過企業微信后臺正式發布的版本。 |
如何區分測試環境和生產環境?
根據 envVersion
的值判斷:
- 測試環境:當值為
'trial'
時,代表體驗版(測試環境)。 - 生產環境:當值為
'release'
時,代表正式版(生產環境)。
示例代碼:判斷環境并處理請求
const accountInfo = uni.getAccountInfoSync();
const envVersion = accountInfo.miniProgram.envVersion;let baseUrl = '';
if (envVersion === 'trial') {baseUrl = '測試環境接口地址'; // 例如:https://test-api.example.com
} else if (envVersion === 'release') {baseUrl = '生產環境接口地址'; // 例如:https://api.example.com
} else {// 開發環境(可選處理,如指向測試環境或本地調試地址)baseUrl = '開發環境接口地址';
}// 示例:使用不同環境的接口地址發起請求
uni.request({url: baseUrl + '/api/data',method: 'GET',success(res) {console.log('請求成功:', res.data);}
});
注意事項
-
企業微信小程序的特殊性:
- 企業微信小程序的「體驗版」對應
envVersion: 'trial'
,需通過企業微信后臺發布體驗版后生效。 - 開發環境(
'develop'
)僅在開發者工具中運行,不會出現在手機端正式運行的場景中。
- 企業微信小程序的「體驗版」對應
-
動態切換環境:
- 若需要在開發階段靈活切換測試/生產環境,可結合
manifest.json
配置或全局變量(如通過uni.getSystemInfoSync()
獲取自定義參數)。
- 若需要在開發階段靈活切換測試/生產環境,可結合
-
兼容性:
- 確保
uni.getAccountInfoSync()
在小程序端(非 H5)運行,該 API 僅支持小程序平臺。
- 確保
通過以上方式,可根據 envVersion
的值準確區分測試環境和生產環境,從而配置不同的服務請求地址。