当前位置: 首页 > news >正文

Uniapp 条件编译详解

Uniapp 条件编译详解

条件编译是 Uniapp 中非常重要的功能,它允许开发者针对不同平台编写特定的代码,从而实现一套代码多端运行的效果。

一、基本语法

1. 以 #ifdef 或 #ifndef 开头

// #ifdef 平台名称
平台特定代码
// #endif// #ifndef 平台名称
非该平台代码
// #endif

2. 多平台判断

// #ifdef MP-WEIXIN || H5
微信小程序或H5平台代码
// #endif

二、平台标识符

平台标识符说明
微信小程序MP-WEIXIN
支付宝小程序MP-ALIPAY
百度小程序MP-BAIDU
字节跳动小程序MP-TOUTIAO
QQ小程序MP-QQ
H5H5浏览器环境
AppAPP包括APP-PLUS和APP-NVUE
iOSAPP-PLUS或IOSApp的iOS平台
AndroidAPP-PLUS或ANDROIDApp的Android平台
快应用QUICKAPP-WEBVIEW华为快应用

三、使用场景

1. 模板中使用

<!-- 只在微信小程序中显示 -->
<!-- #ifdef MP-WEIXIN -->
<view>微信小程序特有内容</view>
<!-- #endif --><!-- 在H5和App中显示 -->
<!-- #ifdef H5 || APP -->
<view>H5和App显示的内容</view>
<!-- #endif -->

2. 样式中使用

/* 只在App中生效的样式 */
/* #ifdef APP */
.my-view {padding-top: 20px;
}
/* #endif *//* 非H5平台的样式 */
/* #ifndef H5 */
.my-text {font-size: 16px;
}
/* #endif */

3. JavaScript中使用

// 平台特定的API调用
// #ifdef MP-WEIXIN
wx.login({success(res) {console.log(res.code);}
});
// #endif// #ifdef H5
console.log('这是在浏览器环境中');
// #endif

4. 页面路由处理

// 不同平台跳转方式不同
function navigateTo(url) {// #ifdef H5window.location.href = url;// #endif// #ifdef MP-WEIXINwx.navigateTo({ url });// #endif// #ifdef APPuni.navigateTo({ url });// #endif
}

四、高级用法

1. 多条件组合

// #ifdef MP-WEIXIN || MP-ALIPAY
// 微信或支付宝小程序特有逻辑
// #endif

2. 条件编译块嵌套

// #ifdef APP
// #ifdef IOS
console.log('这是iOS平台');
// #endif
// #ifdef ANDROID
console.log('这是Android平台');
// #endif
// #endif

3. 文件整体条件编译

可以在文件顶部添加条件编译,整个文件只在特定平台被引入:

// #ifdef MP-WEIXIN
// 整个文件只在微信小程序中有效
export default {data() {return {weixinSpecificData: true}}
}
// #endif

五、manifest.json 中的条件编译

{"mp-weixin": {/* 微信小程序特有配置 */},"h5": {/* H5特有配置 */},"app-plus": {/* App特有配置 */}
}

六、package.json 中的条件编译

{"uni-app": {"scripts": {"mp-weixin": {"title": "微信小程序"},"h5": {"title": "H5"}}}
}

七、注意事项

  1. 注释语法必须正确:条件编译注释必须使用 // 而不能使用 /* */
  2. 空格要求#ifdef 和平台名称之间必须有空格
  3. 大小写敏感:平台标识符必须完全匹配(如 MP-WEIXIN 不能写成 mp-weixin
  4. 文件条件编译:文件整体条件编译时,文件内容必须全部包含在条件编译块中
  5. 性能影响:条件编译不会增加最终包的体积,因为编译时会移除其他平台的代码

八、实际应用示例

1. 平台特定组件

<template><view><!-- 公共部分 --><view>所有平台都显示的内容</view><!-- 平台特定部分 --><!-- #ifdef MP-WEIXIN --><weixin-specific-component /><!-- #endif --><!-- #ifdef H5 --><h5-specific-component /><!-- #endif --></view>
</template><script>
// 平台特定的组件引入
// #ifdef MP-WEIXIN
import weixinSpecificComponent from './weixin-component.vue';
// #endif// #ifdef H5
import h5SpecificComponent from './h5-component.vue';
// #endifexport default {components: {// #ifdef MP-WEIXINweixinSpecificComponent,// #endif// #ifdef H5h5SpecificComponent// #endif}
}
</script>

2. API 兼容处理

function getStorage(key) {// #ifdef MP-WEIXINreturn wx.getStorageSync(key);// #endif// #ifdef H5return localStorage.getItem(key);// #endif// #ifdef APPreturn uni.getStorageSync(key);// #endif
}

通过合理使用条件编译,可以大大减少为不同平台维护多套代码的工作量,同时又能保证各平台的体验最佳。

http://www.lryc.cn/news/620536.html

相关文章:

  • Transformers库中的 Trainer 类 的详细解析
  • 数据产品经理 | GenAI时代数据质量评估原则:FAV-QIRC 框架(一)
  • 【MATLAB代码】滑动窗口均值滤波、中值滤波、最小值/最大值滤波对比。订阅专栏后可查看完整代码
  • Spring 事务详解:从基础到传播机制的实践指南
  • 【机器人-开发工具】ROS 2 (4)Jetson Nano 系统Ubuntu22.04安装ROS 2 Humble版本
  • Claude Code 国内直接使用,原生支持 Windows 免WSL安装教程
  • CVPR 2025 | 即插即用,动态场景深度感知新SOTA!单目视频精准SLAM+深度估计
  • Linux系统Namespace隔离实战:dd/mkfs/mount/unshare命令组合应用
  • 【iOS】KVC原理及自定义
  • 【KALI】第一篇 安装Kali Linux虚拟机之详细操作步骤讲解
  • Redis 从入门到生产:数据结构、持久化、集群、工程实践与避坑(含 Node.js/Python 示例)
  • Windows 安装 Claude Code 并将 Claude Code 的大模型替换为 Kimi 的完整步骤
  • 适用工业分选和工业应用的高光谱相机有哪些?什么品牌比较好?
  • 如何写出更清晰易读的布尔逻辑判断?
  • 【奔跑吧!Linux 内核(第二版)】第7章:系统调用的概念
  • 基于Java飞算AI的Spring Boot聊天室系统全流程实战
  • 在FP32输入上计算前向传播需要多长时间?FP16模型的实例与之前的模型相比,它快了多少?
  • 解刨HashMap的put流程 <二> JDK 1.8
  • 【自动驾驶】自动驾驶概述 ① ( 自动驾驶 与 无人驾驶 | 自动驾驶 相关岗位 及 技能需求 )
  • Day58--图论--117. 软件构建(卡码网),47. 参加科学大会(卡码网)
  • 从零开始的云计算生活——激流勇进,kubernetes模块之Pod资源对象
  • 解决EKS中KEDA访问AWS SQS权限问题:完整的IRSA配置指南
  • 【web站点安全开发】任务4:JavaScript与HTML/CSS的完美协作指南
  • 【论文阅读】基于卷积神经网络和预提取特征的肌电信号分类
  • 随身 Linux 开发环境:使用 cpolar 内网穿透服务实现 VSCode 远程访问
  • docker使用指定的MAC地址启动podman使用指定的MAC地址启动
  • vllmsglang 单端口多模型部署方案
  • 用飞算JavaAI一键生成电商平台项目:从需求到落地的高效实践
  • Java中加载语义模型
  • 【无标题】卷轴屏手机前瞻:三星/京东方柔性屏耐久性测试进展