uni-app怎么获取当前运行的平台环境 uni-app条件编译宏定义使用【详解】

幻夢星雲

幻夢星雲

2026-04-13

275人浏览

原创

应使用条件编译而非uni.getsysteminfosync().platform判断平台,因其返回底层环境而非目标平台;条件编译需用/ #ifdef 平台 /注释格式,严格匹配宏名且不可跨文件传递。

uni-app怎么获取当前运行的平台环境 uni-app条件编译宏定义使用【详解】

uni.getSystemInfoSync().platform 返回值不可靠

在真机上 uni.getSystemInfoSync().platform 有时返回 "ios""android",但 H5 环境下它可能返回 "web",而小程序平台(如微信、支付宝)反而可能返回空字符串或 "devtools"。这不是 bug,是 API 设计本意:它返回的是「底层运行环境」,不是「当前编译目标平台」。

真正需要判断「当前代码跑在哪个平台(微信小程序?H5?App?)」时,必须用条件编译,不能依赖运行时 API。

  • 条件编译在编译阶段就剔除无关代码,体积小、无兼容风险
  • uni.getSystemInfoSync() 适合查屏幕宽高、是否支持 vibration 等设备能力,不适合做平台路由
  • 微信开发者工具模拟器里 platform 常为 "devtools",和真机行为不一致,容易误判

条件编译宏怎么写才不被忽略

uni-app 的条件编译必须写成注释格式,且紧贴代码上下文,中间不能有空行或其它注释干扰。常见错误是加了多余空格、用了双斜杠 // 而非 /* #ifdef ... */,或者放在 export default 外部导致整个模块被跳过。

正确写法示例:

/* #ifdef H5 */
console.log('这是 H5 平台')
/* #endif */
<p>/<em> #ifdef MP-WEIXIN </em>/
wx.login()
/<em> #endif </em>/</p><p>/<em> #ifdef APP-PLUS </em>/
uni.getBatteryInfo()
/<em> #endif </em>/</p>
  • 平台宏名必须全大写,且严格匹配文档:H5MP-WEIXINMP-ALIPAYAPP-PLUSAPP-PLUS-NVUE
  • 多个平台用英文逗号拼接:/* #ifdef H5,MP-WEIXIN */
  • 否定写法用 #ifndef,比如 /* #ifndef APP-PLUS */ 表示「非 App 平台」
  • 宏定义只对紧邻的下一行或多行代码生效,跨组件/文件不传递

process.env.NODE_ENV 和 __UNI_MP_VERSION 是啥

process.env.NODE_ENV 是 Node.js 构建环境变量,uni-app 编译时会注入,但它只区分 "development""production",**完全不反映平台信息**。有人误用它做平台判断,结果 H5 和小程序都输出 "production",逻辑直接崩掉。

uni-app
uni-app

uni-app 官方文档、npm 包和项目创建入口。

下载

__UNI_MP_VERSION 是 uni-app 内部注入的常量,仅在小程序平台存在,值为对应基础库版本号(如 "2.7.0"),但它无法区分微信、支付宝等不同小程序——所有小程序平台都会定义它。

  • 这两个变量都不能替代条件编译宏
  • 想动态获取当前平台名称?没有运行时全局变量。唯一可靠方式是:自己用条件编译定义一个 PLATFORM 常量
  • 例如在 main.js 开头写:
    /* #ifdef H5 */
    const PLATFORM = 'h5'
    /* #endif */
    /* #ifdef MP-WEIXIN */
    const PLATFORM = 'mp-weixin'
    /* #endif */

条件编译嵌套和 JS 文件里怎么用

条件编译可以嵌套,但深度建议控制在两层以内,否则可读性骤降。JS 文件中使用没问题,但要注意:不能在对象字面量或函数参数里直接写宏,必须整块代码包裹。

错误写法:

const config = {
  /* #ifdef H5 */
  api: 'https://h5.api.com',
  /* #endif */
  timeout: 10000
}
—— 这会导致语法错误,因为宏展开后 JSON 结构被破坏。
  • 正确做法是把整个对象或配置项用宏包住:
    /* #ifdef H5 */
    const config = { api: 'https://h5.api.com', timeout: 10000 }
    /* #endif */
    /* #ifdef MP-WEIXIN */
    const config = { api: 'https://mp.api.com', timeout: 15000 }
    /* #endif */
  • TS 项目中,类型声明也要对应条件编译,否则类型检查会报错
  • Vue 单文件组件里,<script></script><template></template><style></style> 都支持独立条件编译,互不影响
  • 注意:条件编译不作用于 require 动态路径,require(`./api/${PLATFORM}.js`) 这种写法无效

实际项目里最常踩的坑,是把条件编译当运行时 if 用,或者指望某个变量能跨平台统一取值。它本质是“编译期代码剪枝”,不是“运行时分支判断”——这点没理清,后面所有逻辑都会偏。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

uni-app

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1111

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

2283

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

2133

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

2344

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

336

5

Selenium WebDriver元素定位与页面操作教程
Selenium WebDriver元素定位与页面操作教程

本专题整理Selenium WebDriver元素定位、XPath、CSS Selector、等待机制、窗口切换、Frame处理、Alert弹窗、Cookie操作和文件上传等核心用法。

2026.08.05

3

26

Selenium Grid分布式测试与并行执行教程
Selenium Grid分布式测试与并行执行教程

本专题整理Selenium Grid架构、远程WebDriver、并行测试、Docker部署、Kubernetes动态Grid、浏览器矩阵和测试环境扩展方法,适合进阶自动化测试团队使用。

2026.08.05

1

18

Selenium常见报错排查与自动化测试稳定性
Selenium常见报错排查与自动化测试稳定性

本专题整理Selenium常见报错、驱动版本问题、元素找不到、点击失败、等待超时、浏览器闪退、脚本不稳定和测试用例维护方法。

2026.08.05

0

17

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

11

21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习