一、条件编译

条件编译

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。

写法:以 #ifdef#ifndef%PLATFORM% 开头,以 #endif 结尾。

  • #ifdef:if defined 仅在某平台存在
  • #ifndef:if not defined 除了某平台均存在
  • %PLATFORM%:平台名称

条件编译写法

说明

#ifdef APP-PLUS 需条件编译的代码 #endif

仅出现在 App 平台下的代码

#ifndef H5 需条件编译的代码 #endif

除了 H5 平台,其它平台均存在的代码

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

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

%PLATFORM% 可取值如下:


平台

APP-PLUS

App

APP-PLUS-NVUE

App nvue

H5

H5

MP-WEIXIN

微信小程序

MP-ALIPAY

支付宝小程序

MP-BAIDU

百度小程序

MP-TOUTIAO

字节跳动小程序

MP-QQ

QQ小程序

MP

微信小程序/支付宝小程序/百度小程序/字节跳动小程序/QQ小程序

支持的文件

  • .vue
  • .js
  • .css
  • pages.json
  • 各预编译语言文件,如:.scss、.less、.stylus、.ts、.pug

注意: 条件编译是利用注释实现的,在不同语法里注释写法不一样,js使用 // 注释、css 使用 /* 注释 */、vue/nvue 模板里使用 ;

API 的条件编译

// #ifdef  %PLATFORM%
平台特有的API实现
// #endif

示例,如下代码仅在 App 下出现:

uniapp 判断当前机型是否为ios uniapp条件编译判断苹果安卓_条件编译

示例,如下代码不会在 H5 平台上出现:

uniapp 判断当前机型是否为ios uniapp条件编译判断苹果安卓_H5_02

除了支持单个平台的条件编译外,还支持多平台同时编译,使用 || 来分隔平台名称。

示例,如下代码会在 App 和 H5 平台上出现:

uniapp 判断当前机型是否为ios uniapp条件编译判断苹果安卓_H5_03

组件的条件编译

<!--  #ifdef  %PLATFORM% -->
平台特有的组件
<!--  #endif -->

示例,如下广告组件仅会在微信小程序中出现:

uniapp 判断当前机型是否为ios uniapp条件编译判断苹果安卓_条件编译_04

样式的条件编译

/*  #ifdef  %PLATFORM%  */
平台特有样式
/*  #endif  */

注意: 样式的条件编译,无论是 css 还是 sass/scss/less/stylus 等预编译语言中,必须使用 /注释/ 的写法。

正确写法

uniapp 判断当前机型是否为ios uniapp条件编译判断苹果安卓_H5_05

错误写法

uniapp 判断当前机型是否为ios uniapp条件编译判断苹果安卓_条件编译_06

pages.json 的条件编译

下面的页面,只有运行至 App 时才会编译进去。

uniapp 判断当前机型是否为ios uniapp条件编译判断苹果安卓_条件编译_07

不同平台下的特有功能,以及小程序平台的分包,都可以通过 pages.json 的条件编译来更好地实现。这样,就不会在其它平台产生多余的资源,进而减小包体积。

注意

  • Android 和 iOS 平台不支持通过条件编译来区分,如果需要区分 Android、iOS 平台,请通过调用 uni.getSystemInfo 来获取平台信息。支持ifios、ifAndroid代码块,可方便编写判断。