uniapp多条件编译

hbrely
2022-12-21 / 0 评论 / 215 阅读 / 正在检测是否收录...
https://zy.hbrely.net 广告

图片名称

前言:

由于本次业务有 PC 端H5 页面,还有 手机端的H5页面,不同的端,模块展示可能不同,但是大部分功能又是相同的。
如果通过简单的 if…else… 判断不同端,调用相应的 API 或 展示相应的模块,那随着时间和业务的发展,终有一天会造成代码混乱,不好维护。
最重要的一点是在某特定的端上,存在大量的其他端的冗余代码,会增加文件体积,影响加载速度以及性能。
最好的方式就是可以根据端,打包出的代码只有和这个端有关系的代码,无其他冗余代码,这样干净也便于以后的维护。
这样就想到了 条件编译 。 uni-app 跨段框架就使用了 条件编译 。

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

写法

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

ifdef:if defined 仅在某平台存在

ifndef:if not defined 除了某平台均存在

%PLATFORM%:平台名称

%PLATFORM% 可取值如下:

支持的文件

.vue

.js

.css

pages.json

各预编译语言文件,如:.scss、.less、.stylus、.ts、.pug

注意

条件编译是利用注释实现的,在不同语法里注释写法不一样。

js 使用// 注释

css使用/* 注释 */

vue/nvue 模板里使用<!-- 注释 -->;

条件编译APP-PLUS包含APP-NVUE和APP-VUE,APP-PLUS-NVUE和APP-NVUE没什么区别,为了简写后面出了APP-NVUE ;

使用条件编译请保证编译前和编译后文件的正确性,比如json文件中不能有多余的逗号;

VUE3 需要在项目的 manifest.json 文件根节点配置 “vueVersion” : “3”

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

有些跨端工具可以提供js的条件编译或多态,但这对于实际开发远远不够。uni-app不止是处理js,任何代码都可以多端条件编译,才能真正解决实际项目的跨端问题。另外所谓多态在实际开发中会造成大量冗余代码,很不利于复用和维护。举例,微信小程序主题色是绿色,而百度支付宝小程序是蓝色,你的应用想分平台适配颜色,只有条件编译是代码量最低、最容易维护的。
有些公司的产品运营总是给不同平台提不同需求,但这不是拒绝uni-app的理由。关键在于项目里,复用的代码多还是个性的代码多,正常都是复用的代码多,所以仍然应该多端。而个性的代码放到不同平台的目录下,差异化维护。

评论 (0)

取消