(1)开发环境和生产环境

    uni-app 可通过 process.env.NODE_ENV 判断当前环境是开发环境还是生产环境,一般用于连 接测试服务器或生产服务器的动态切换。

    在HBuilderX 中,点击「运行」编译出来的代码是开发环境,点击「发行」编译出来的代码是生产 环境

    运行环境判断与跨端兼容 - 图1

    (2)判断平台

    平台判断有2种场景,一种是在编译期判断,一种是在运行期判断。

    编译期判断编译期判断,即条件编译 https://uniapp.dcloud.io/tutorial/platform.html,不同平台在编译出包后已经是不同的代码,

    运行环境判断与跨端兼容 - 图2

    运行期判断 运行期判断是指代码已经打入包中,仍然需要在运行期判断平台,此时可使用 uni.getSystemInfoSync().platform 判断客户端环境是 Android、iOS 还是小程序开发工具

    运行环境判断与跨端兼容 - 图3

    (3) 跨端兼容

    https://uniapp.dcloud.io/tutorial/platform.html

    uni-app 已将常用的组件、JS API 封装到框架中,开发者按照 uni-app 规范开发即可保证多平台兼 容,大部分业务均可直接满足,但每个平台有自己的一些特性,因此会存在一些无法跨平台的情 况。

    大量写 if else,会造成代码执行性能低下和管理混乱。

    编译到不同的工程后二次修改,会让后续升级变的很麻烦。

    在 C 语言中,通过 #ifdef、#ifndef 的方式,为 windows、mac 等不同 os 编译不同的代码。

    uni-app 参考这个思路,为 uni-app 提供了条件编译手段,在一个工程里优雅的完成了平台个性 化实现。

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

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

    #ifdef :if defined 仅在某平台存在

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

    %PLATFORM%:平台名称

    %PLATFORM% 可取值如下:

    运行环境判断与跨端兼容 - 图4