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
更多关于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

