uni-app 条件编译错误

uni-app 条件编译错误

操作步骤:

预期结果:

实际结果:

bug描述:

文档中关于条件编译的说明
https://uniapp.dcloud.io/platform?id=preprocessor
有一个例子:

ifdef H5 || MP-WEIXIN
需条件编译的代码  
endif

其对应的说明是

在 H5 平台或微信小程序平台存在的代码(这里只有||,不可能出现&&,因为没有交集)

在实际使用中我发发现这种写法完全无效,真正起作用的只有第一个条件

查看了uniapp-cli的相关代码后,发现条件处理用了这个库
https://github.com/onehealth/preprocess

而这个库的 #ifdef #ifndef 根本就没有对 || 的支持,只支持最简单的一种形式

所以 uni-app 的这处文档错了,对开发者造成了误导。



| 信息类别       | 信息内容           |
|----------------|--------------------|
| 产品分类       | uniapp/H5          |
| PC开发环境     | Windows            |
| PC开发环境版本 | 10                 |
| HBuilderX类型  | 正式               |
| HBuilderX版本  | 3.2.16             |
| 浏览器平台     | Chrome             |
| 浏览器版本     | 90                 |
| 项目创建方式   | HBuilderX          |

更多关于uni-app 条件编译错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 条件编译错误的实战教程也可以访问 https://www.itying.com/category-93-b0.html


您提出的问题确实存在,文档中的示例 #ifdef H5 || MP-WEIXIN 写法在当前版本中确实无法实现“或”逻辑。

核心原因:uni-app 的条件编译预处理依赖于 preprocess 库,该库的 #ifdef#ifndef 指令原生不支持 ||&& 这样的逻辑运算符。它仅支持检查单个预处理变量是否被定义。

当前有效的写法: 要实现“在 H5 平台或微信小程序平台”执行代码,需要将条件拆分为两段:

// 正确写法:使用两个独立的条件编译块
#ifdef H5
// H5平台代码
console.log('H5平台');
#endif

#ifdef MP-WEIXIN
// 微信小程序平台代码
console.log('微信小程序平台');
#endif
回到顶部