跨终端兼容https://uniapp.dcloud.io/plat...商家可以直接满意。但是每个平台都有自己的一些特点,所以会出现一些不能跨平台的情况。写大量的ifelse会导致代码执行性能差,管理混乱。编译到不同的项目,修改两次,会让后续的升级很麻烦。在C语言中,通过#ifdef和#ifndef为windows、mac等不同的os编译不同的代码。参考这个思路,uni-app为uni-app提供了一种条件编译的手段,优雅的完成了一个项目中平台定制化的实现。ConditionalcompilationConditionalcompilation是用特殊注释来标记的,注释中的代码在编译时会根据这些特殊注释来编译到不同的平台。写法:以#ifdef或#ifndef加%PLATFORM%开头,以#endif结尾。#ifdef:ifdefined只存在于某个平台#ifndef:ifnotdefined存在于除某个平台以外的所有平台%PLATFORM%:平台名称#ifdefAPP-PLUS需要条件编译代码#endif只出现在App平台代码#ifndefH5需要条件编译的代码#endif除H5外所有平台都存在的代码#ifdefH5||WEIXIN微信小程序微信小程序MP-ALIPAY支付宝小程序支付宝小程序MP-BAIDU百度小程序百度小程序MP-TOUTIAO今日头条小程序今日头条小程序MP-QQQQ小程序(目前只支持cli版)MP微信小程序/支付宝小程序/百度小程序/今日头条小程序/QQ小程序支持的文件.vue.js.csspages.json各预编译语言文件,如:.scss,.less,.stylus,.ts,.pug注:有条件编译是使用注解实现的。注释在不同的语法中有不同的写法。js使用//注解,css使用/*注解*/,vue/nvue模板使用;API条件编译//#ifdef%PLATFORM%平台特定的API实现//#endif例子,下面的代码只出现在App下:例子,下面的代码不会出现在H5平台上:除了支持条件编译一个单平台,也支持支持多平台同时编译,使用||分隔平台名称。比如在App和H5平台上会出现如下代码:只出现在微信小程序中出现:Conditionalcompilationofstyles/*#ifdef%PLATFORM%*/Platform-specificstyles/*#endif*/注:样式的条件编译,无论是css还是预编译语言如sass/scss/less/stylus,必须使用/comments/的写法。pages.json条件编译以下页面,只有运行到App时才会编译。静态目录的条件编译在不同的平台可能不一样,引用的静态资源也可能不一样。这个问题可以通过静态条件编译来解决。在static目录下新建不同平台的专有目录(目录名与%PLATFORM%取值范围相同,但字母全部小写),专有目录下的静态资源只会在特定的平台上编译平台。如下目录结构所示,a.png只会在微信小程序平台编译,b.png会在所有平台编译。全局目录的条件编译如果想更彻底的将各个平台的页面文件分开,也可以在uni-app项目的根目录下创建一个platforms目录,然后再进一步创建子目录如APP-PLUS和MP-下面的微信用来存放不同平台的文件。文档。HBuilderX支持HBuilderX对uni-app的条件编译提供了丰富的支持:代码块支持在HBuilderX中开发uni-app时,可以通过输入ifdef快速生成条件编译的代码片段正确注释和快速选择在HBuilderX中,ctrl+alt+/生成正确评论(js://评论,css:/*评论*/,vue/nvue模板:)。正确注释和快速选择在HBuilderX中,ctrl+alt+/可以生成正确的注释(js://comments,css:/*comments*/,vue/nvuetemplate:)。注意Android和iOS平台不支持通过条件编译来区分。如果需要区分Android和iOS平台,请调用uni.getSystemInfo获取平台信息。从HBuilderX1.9.10开始,支持ifios和ifAndroid代码块,方便编写判断。一些跨端工具可以提供js条件编译或者多态,但这对于实际开发来说是远远不够的。uni-app不仅处理js,任何代码都可以多终端条件编译,真正解决实际项目的跨终端问题。另外,所谓的多态性在实际开发中会造成大量的冗余代码,不利于复用和维护。比如微信小程序的主题色是绿色,而百度支付宝小程序的主题色是蓝色。如果你想根据平台适配你的应用程序的颜色,只有条件编译是代码量最少、最容易维护的。有些公司的产品运营总是对不同的平台提出不同的诉求,但这不是拒绝uni-app的理由。关键是在项目中,不管是复用的代码多还是个别的代码多,一般复用的代码比较多,还是应该多端的。个性化代码放在不同平台的目录下,进行差异化维护。??别忘了留下你的学习足迹【点赞+收藏+评论】作者信息:【作者】:Jeskson【原创公众号】:达达前端【福利】:公众号回复“信息”发送自己-学习资料大礼包(进群分享,要什么就说,看我有没有)!【转载说明】:转载请注明出处,谢谢合作!~大前端开发,定位前端开发技术栈博客,PHP背景知识点,web全栈技术领域,数据结构与算法,网络原理等以通俗易懂的方式呈现给小伙伴方式。感谢您的支持,感谢您的厚爱!!!如本账号内容有问题(例如:涉及版权或其他问题),请及时联系我们进行整改,我们会尽快处理。请喜欢它!因为您的认可/鼓励是我写作最大的动力!欢迎来到达达的CSDN!这是一个有品质有态度的博客
