uniapp条件编译

条件编译

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

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

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

仅出现在App平台下的代码

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

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

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

在H5平台或微信小程序平台存在的代码

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

注意

多个这里只有||,不可能出现&&,因为没有交集。

平台名称参数

%PLATFORM%可取值如下:

值 生效条件
VUE3 Vue3
APP-PLUS App
APP-PLUS-NVUE或APP-NVUE App nvue
H5 H5
MP-WEIXIN 微信小程序
MP-ALIPAY 支付宝小程序
MP-BAIDU 百度小程序
MP-TOUTIAO 字节跳动小程序
MP-LARK 飞书小程序
MP-QQ QQ小程序
MP-KUAISHOU 快手小程序
MP-JD 京东小程序
MP-360 360小程序
MP 所有小程序
QUICKAPP-WEBVIEW 所有快应用
QUICKAPP-WEBVIEW-UNION 快应用联盟
QUICKAPP-WEBVIEW-HUAWEI 快应用华为

注意

Vue3需要在项目的manifest.json文件根节点配置"vueVersion" : "3"

如果在vscode打开 是 不一样

显示截图为

API 的条件编译

javascript 复制代码
// #ifdef  %PLATFORM%
平台特有的API实现
// #endif

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

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

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

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

组件的条件编译

javascript 复制代码
<!--  #ifdef  %PLATFORM% -->
平台特有的组件
<!--  #endif -->

示例,如下公众号关注组件仅会在微信小程序中出现:

javascript 复制代码
<view>
  <view>微信公众号关注组件</view>
  <view>
    <!-- #ifdef MP-WEIXIN -->
    <official-account></official-account>
    <!-- #endif -->
  </view>
</view>

样式的条件编译

javascript 复制代码
/*  #ifdef  %PLATFORM%  */
平台特有样式
/*  #endif  */

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

正确写法

错误写法

pages.json 的条件编译

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

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

json的条件编译,如不同平台的key名称相同,cli项目下开发者自己安装的校验器会报错,需自行关闭这些校验器对json相同key的校验规则。如果使用HBuilderX的校验器,无需在意此问题,HBuilderX的语法校验器为此优化过。

static 目录的条件编译

在不同平台,引用的静态资源可能也存在差异,通过 static 的的条件编译可以解决此问题,static 目录下新建不同平台的专有目录(目录名称同%PLATFORM%值域,但字母均为小写),专有目录下的静态资源只有在特定平台才会编译进去。

如以下目录结构,a.png只有在微信小程序平台才会编译进去,b.png在所有平台都会被编译。

javascript 复制代码
┌─static                
│  ├─mp-weixin
│  │  └─a.png     
│  └─b.png
├─main.js        
├─App.vue      
├─manifest.json 
└─pages.json   

整体目录条件编译

如果想把各平台的页面文件更彻底的分开,也可以在cafe-app项目根目录创建platforms目录,然后在下面进一步创建app-plus、mp-weixin等子目录,存放不同平台的文件。

platforms目录下只支持放置页面文件(即页面vue文件),如果需要对其他资源条件编译建议使用static 目录的条件编译。

相关推荐
郑州光合科技余经理15 小时前
同城小程序开发:同一笔单在用户端和商家端各显示到哪
android·java·开发语言·前端·后端·uni-app·php
普通人616 小时前
uniapp模版JS
开发语言·javascript·小程序·uni-app·1024程序员节
wiseyao121917 小时前
uniapp scroll-view滚动到最后
前端·javascript·uni-app
红红谈说20 小时前
同一套产品两个技术栈,双版本前端工程差异怎么收敛?
前端·uni-app·vue3·前后端分离·双版本维护·接口约定
hudie7652 天前
LikeShop 二开最常改的 5 个文件(附改前改后对比)
前端·uni-app·php·个人开发
梅雅达编程笔记2 天前
Day 17 | uni-app 小程序:前端从零搭建
微信小程序·typescript·uni-app·vue3·pinia·前端开发·全栈
一渊之隔3 天前
uniapp BLE 开发踩坑:小米手机数据接收截断问题排查全记录
智能手机·uni-app
阿俊-全栈开发3 天前
LikeShop 单商户标准版 UniApp 端二开:页面组件复用与自定义主题适配
uni-app·likeshop开源商城·likeshop单商户标准版·多商户源码
半生过往3 天前
uni-app多端项目工作笔记
笔记·uni-app
00后程序员张3 天前
无需 Mac 的 iOS App 上架工具,开心上架Appuploader 负责哪些环节
android·ios·小程序·https·uni-app·iphone·webview