UNPKG

t-comm

Version:

专业、稳定、纯粹的工具库

88 lines (87 loc) 4.38 kB
/** * 环境切换(test / prod) * * 设计要点: * 1. 仅维护 test / prod 两个环境(后续如需扩展再说)。 * 2. 默认环境根据微信小程序/小游戏版本自动判定: * - envVersion === 'release' → 'prod' * - 其他(develop / trial / 非小程序环境) → 'test' * 3. 构建期可通过 `globalThis.__COCOS_BUILD_NETWORK_ENV__` 注入默认值, * 优先级高于 wx AccountInfo 推断但低于用户手动切换(持久化存储)。 * 典型场景:CI/headless --env prod 构建时,开发工具/体验版中仍走正式域名。 * 4. 用户通过 wx.__pmdSetEnv__('prod' | 'test') 手动切换后,会写入持久化存储, * 下次启动时优先读取存储值,不再受小程序版本影响(直到再次切换)。 * 5. 切换后默认自动重启小游戏(wx.restartMiniProgram)/ 浏览器(location.reload), * 让新环境立刻生效。 * 6. 全局调试函数优先挂到 wx 对象上(小游戏环境下 console 拿不到 globalThis), * 没有 wx 时回退到 globalThis。 * * 优先级(从高到低): * 用户手动切换(持久化存储) > globalThis.__COCOS_BUILD_NETWORK_ENV__ > wx AccountInfo 推断 */ import type { ICocosLoginInfoStorage } from '../network/types'; /** 当前支持的环境枚举 */ export type Env = 'test' | 'prod'; /** 各环境对应的服务端域名(不带协议、不带末尾斜杠) */ export type EnvDomainMap = Record<Env, string>; /** 默认存储 key */ export declare const DEFAULT_ENV_STORAGE_KEY = "pmd_api_cocos_env"; /** 构建期注入的全局变量 key:项目通过 globalThis[__COCOS_BUILD_NETWORK_ENV__] 设置默认环境 */ export declare const GLOBAL_BUILD_ENV_KEY = "__COCOS_BUILD_NETWORK_ENV__"; /** 默认全局调试函数名 */ export declare const DEFAULT_GLOBAL_SET_ENV = "__pmdSetEnv__"; export declare const DEFAULT_GLOBAL_GET_ENV = "__pmdGetEnv__"; /** * 推断"未手动设置过环境"时的默认 env: * 1. globalThis.__COCOS_BUILD_NETWORK_ENV__(构建期注入) * 2. 小程序正式版(release) → 'prod' * 3. 其他情况 → 'test' */ export declare function inferDefaultEnv(): Env; /** * 读取当前生效的环境: * - 优先读取持久化存储中的手动切换值(与 createEnvSwitcher 内部 readEnv 保持一致) * - 没有持久化值时回退到 inferDefaultEnv()(含 globalThis 构建注入) */ export declare function readEnv(storageKey?: string, storage?: ICocosLoginInfoStorage): Env; export declare function isTestEnv(storageKey?: string, storage?: ICocosLoginInfoStorage): boolean; export interface IEnvSwitcherOptions { /** 各环境对应的服务端域名(不带协议、不带末尾斜杠) */ svrdomain: EnvDomainMap; /** 持久化 key,默认 'pmd_api_cocos_env' */ storageKey?: string; /** 自定义存储(默认 cocos sys.localStorage → 浏览器 localStorage → 内存) */ storage?: ICocosLoginInfoStorage; /** 切换时是否自动重启(restartMiniProgram / location.reload),默认 true */ autoRestart?: boolean; /** * 全局 setter 函数名,默认 '__pmdSetEnv__'。传 false 关闭挂载。 * 会优先挂到 wx 上(如 wx.__pmdSetEnv__),没有 wx 时回退到 globalThis。 */ globalSetEnvName?: string | false; /** * 全局 getter 函数名,默认 '__pmdGetEnv__'。传 false 关闭挂载。 * 会优先挂到 wx 上(如 wx.__pmdGetEnv__),没有 wx 时回退到 globalThis。 */ globalGetEnvName?: string | false; /** 切换成功后回调(持久化已完成、重启之前) */ onChange?: (next: Env, prev: Env) => void; } export interface IEnvSwitcher { /** 当前环境 */ getEnv(): Env; /** 当前环境对应的域名(不带协议) */ getDomain(): string; /** 当前环境对应的 baseUrl(含 https://) */ getBaseUrl(): string; /** * 切换环境。autoRestart 不传时取构造时配置(默认 true)。 * 非法 env 会被忽略并打 warn。 */ setEnv(env: Env, autoRestart?: boolean): void; isTestEnv(): boolean; } /** * 创建一个环境切换器。 */ export declare function createEnvSwitcher(options: IEnvSwitcherOptions): IEnvSwitcher;