--- description: "小程序平台检测工具 - 用于识别当前运行平台环境" --- # 小程序平台检测工具使用文档 ## 功能概述 `mini/src/utils/platform.ts` 提供了一套完整的平台检测工具,用于在 Taro 跨端小程序中识别当前运行环境,支持微信小程序、H5 网页端等多种平台的条件判断。 ## 导入方式 ```typescript import { getPlatform, isWeapp, isH5 } from '@/utils/platform' ``` ## 核心功能 ### 1. 获取当前平台 ```typescript getPlatform(): TaroGeneral.ENV_TYPE ``` 返回当前运行环境的平台类型枚举值。 **返回值说明:** - `WEAPP`: 微信小程序 - `WEB`: H5 网页端 - `RN`: React Native - `SWAN`: 百度智能小程序 - `ALIPAY`: 支付宝小程序 - `TT`: 字节跳动小程序 - `QQ`: QQ 小程序 **使用示例:** ```typescript import { getPlatform } from '@/utils/platform' import Taro from '@tarojs/taro' const currentPlatform = getPlatform() console.log('当前平台:', currentPlatform) // 根据平台执行不同逻辑 switch (currentPlatform) { case Taro.ENV_TYPE.WEAPP: // 微信小程序专属逻辑 break case Taro.ENV_TYPE.WEB: // H5 网页端专属逻辑 break default: // 其他平台通用逻辑 } ``` ### 2. 是否为微信小程序 ```typescript isWeapp(): boolean ``` 判断当前是否在微信小程序环境中运行。 **使用示例:** ```typescript import { isWeapp } from '@/utils/platform' if (isWeapp()) { // 微信小程序专属功能 wx.login({ success: (res) => { console.log('微信登录成功:', res.code) } }) // 使用小程序 API wx.getUserProfile({ desc: '用于完善用户资料', success: (res) => { console.log('用户信息:', res.userInfo) } }) } else { // 非小程序环境的替代方案 console.log('当前不是微信小程序环境') } ``` ### 3. 是否为 H5 网页端 ```typescript isH5(): boolean ``` 判断当前是否在 H5 网页端环境中运行。 **使用示例:** ```typescript import { isH5 } from '@/utils/platform' if (isH5()) { // H5 网页端专属功能 // 使用浏览器 API localStorage.setItem('token', 'your-token') // 使用 DOM API window.addEventListener('resize', handleResize) } else { // 小程序环境的替代方案 Taro.setStorageSync('token', 'your-token') } ``` ## 实际应用场景 ### 场景1:条件渲染组件 ```typescript import { isWeapp, isH5 } from '@/utils/platform' const PlatformSpecificButton = () => { if (isWeapp()) { return ( ) } if (isH5()) { return ( ) } return null } ``` ### 场景2:平台差异化 API 调用 ```typescript import { isWeapp, isH5 } from '@/utils/platform' const uploadImage = async (file: File) => { if (isWeapp()) { // 小程序上传 return new Promise((resolve, reject) => { wx.uploadFile({ url: '/api/upload', filePath: file.path, name: 'file', success: resolve, fail: reject }) }) } if (isH5()) { // H5 上传 const formData = new FormData() formData.append('file', file) const response = await fetch('/api/upload', { method: 'POST', body: formData }) return response.json() } } ``` ### 场景3:平台特定样式处理 ```typescript import { isWeapp, isH5 } from '@/utils/platform' const getPlatformStyles = () => { const baseStyles = 'p-4 rounded-lg' if (isWeapp()) { return `${baseStyles} bg-green-100 text-green-800` } if (isH5()) { return `${baseStyles} bg-blue-100 text-blue-800 shadow-lg` } return baseStyles } ``` ## 与 Taro API 的集成 平台检测工具与 Taro 的 API 完美集成,可以结合使用: ```typescript import { isWeapp, isH5 } from '@/utils/platform' import Taro from '@tarojs/taro' // 平台特定的导航 const navigateToPage = (url: string) => { if (isWeapp()) { Taro.navigateTo({ url }) } else if (isH5()) { window.location.href = url } } // 平台特定的存储 const setStorage = (key: string, value: any) => { if (isWeapp()) { Taro.setStorageSync(key, value) } else if (isH5()) { localStorage.setItem(key, JSON.stringify(value)) } } ``` ## 注意事项 1. **必须在 Taro 环境中使用**:这些工具函数依赖于 Taro 的运行时环境 2. **服务端渲染**:在 SSR 环境中使用时需要添加环境判断 3. **测试环境**:在单元测试时可能需要 mock Taro 环境 4. **性能优化**:工具函数都是轻量级的,不会带来性能开销 ## 扩展建议 可以根据项目需要扩展更多平台检测函数: ```typescript // 在 platform.ts 中添加更多检测函数 export const isAlipay = (): boolean => { return getPlatform() === Taro.ENV_TYPE.ALIPAY } export const isBaidu = (): boolean => { return getPlatform() === Taro.ENV_TYPE.SWAN }