uni-app 自定义编译模块基准平台设置为H5后 条件编译h5会进入

uni-app 自定义编译模块基准平台设置为H5后 条件编译h5会进入

示例代码:

"uni-app": {
  "scripts": {
    "pc-platform": {
      "title": "pc平台",
      "BROWSER": "Chrome",
      "env": {
        "UNI_PLATFORM": "h5"
      },
      "define": {
        "PC-WEB": true
      }
    }
  }
}

操作步骤:

//#ifdef PC-WEB 此处进入 // #endif

//#ifdef H5 这里还会进入一次,应该不进入才对 // #endif


## 预期结果:


//#ifdef PC-WEB
此处进入
// #endif  

//#ifdef H5
这里还会进入一次,应该不进入才对
// #endif

实际结果:

//#ifdef PC-WEB 此处进入 // #endif

//#ifdef H5 这里还会进入一次,应该不进入才对 // #endif


## bug描述:


//#ifdef PC-WEB
此处进入
// #endif  

//#ifdef H5
这里还会进入一次,应该不进入才对
// #endif
信息类别 信息内容
产品分类 uniapp/H5
PC开发环境 Mac
PC开发环境版本 10.14.6 (18G3020)
HBuilderX类型 正式
HBuilderX版本 2.8.4
浏览器平台 Chrome
浏览器版本 83.0.4103.116(正式版本) (64 位)
项目创建方式 HBuilderX

更多关于uni-app 自定义编译模块基准平台设置为H5后 条件编译h5会进入的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

没毛病,H5 相当于是父类,会进入

更多关于uni-app 自定义编译模块基准平台设置为H5后 条件编译h5会进入的实战教程也可以访问 https://www.itying.com/category-93-b0.html


如果这样的话会不会就违背了平台条件编译的原意?既然是自定义了平台,那理应就是区分出来,那//#if等对自定义平台就没有意义了呢?不知道我这么理解对不对

回复 紫洋: 非也,就好比中国男人也属于中国人。

回复 紫洋: 而与#ifdef PC-WEB相反的不是#ifdef H5而是#ifndef PC-WEB

回复 DCloud_UNI_GSQ: 你确定你这种理解OK?大致都能猜到内部基于h5底层做了相应判断实现而已,外围自定义不好去做具体区分而已不就结了,你自己看看你自己说的能说得过去么。实质不是真的能自定义平台,自定义平台是有一定区分的。当然,只是可以变相去实现条件编译判断而已。服你的辩解

会不会是因为pc可以开H5模式, 所以H5也生效, 但是你不打开开发者模式, 就不生效?

这是一个关于uni-app条件编译的问题。当自定义编译模式设置UNI_PLATFORM为h5时,H5平台的条件编译仍然会生效,这是预期的行为。

原因分析:

  1. UNI_PLATFORM=h5和自定义的PC-WEB定义是同时存在的
  2. 条件编译#ifdef H5是基于UNI_PLATFORM判断的,所以会进入
  3. PC-WEB是自定义的define变量,两者是独立的

解决方案:

  1. 如果需要区分PC-WEB和普通H5,建议修改条件编译判断逻辑:
//#ifdef H5 && PC-WEB
PC端专属代码
//#endif

//#ifdef H5 && !PC-WEB
普通H5代码
//#endif
回到顶部