您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

运行环境判断以及平台判断

在日常开发过程中,一般测试服务器和生产服务器是分开的,测试服务器和生产服务器之项目配置数据是不同的,每次切换运行环境还要这些配置数据非常麻烦,并且不利于我们后期对项目的维护,万一上线时某个数据忘记改了,整个项目不就歇菜了嘛。

那这个时候能判断当前环境是开发环境还是生产环境就很重要了,可以帮助我们完成测试服务器和生产服务器之动态切换。

另外因为一些平台的差异性,我们也需要对当前的平台进行判断,用来应对这些平台的差异。

比如 可以打包成原生 app、H5 、@R__2406@等项目,并运行在相应的平台上面,但是各个平台之间也是有区别的,比如了栏还有返回键,但是原生 app 没有栏和返回键,就需要我们自己定义。所以需要项目来自己判别当前运行在哪个平台上面,根据平台的特性不同的。

在用 HBuilderX 进行开发时,开发环境和运行环境不需要使用判断,点击“运行”编译出来的是开发环境:

在 中使用来判断开发环境还是生产环境也很简单, 框架直接帮我们打包了现成的 process.env.NODE_ENV,我们通过这个可以直接来判断当前环境是开发环境还是生产环境。
实例:

if(process.env.NODE_ENV === 'development'){
    console.log('开发环境')
}else{
    console.log('生产环境')
}

我们只是打印了一下当前是开发环境还是生产环境,实际开发过程中,可以将打印语句换成相应开发环境下的配置数据,这样切换平台运行的时候就不用担心配置数据出问题了。

运行平台的判断可以在编译期判断,也可以在运行期判断。

平台之差异在讲条件编译的时候也说过,可以通过条件编译使特定的只运行在对应平台上。

条件编译里面的,只会编译到对应平台的发行包里面,其他平台发行包不会包含条件编译的。比如说下面的,只会编译到 H5 的发行包里面,其他平台的发行包不会包含下面。
实例:

// #ifdef H5
    console.log("只有 H5 平台才能打印这句话")
// #endif

运行期判断是指已经编译到发行包里面,所以我们还是需要来判断当前是在哪个平台上面运行。这个时候可以使用 uni.getSyInfoSync().platform 来判断当前的平台是Android,iOS还是工具。

在工具、开发工具、支付宝工具中使用 uni.getSyInfoSync().platform 返回值都是 devtools,所以我们只能知道当前是工具,不能继续往下细分了。
实例:

switch(uni.getSyInfoSync().platform){
    case 'android':
       console.log('运行在Android平台上面')
       break;
    case 'ios':
       console.log('运行在iOS平台上面')
       break;
    default:
       console.log('运行在开发者工具上面')
       break;
}

如果我们还有其他的开发需求,比如微信服务号开发, 中没有对应的平台,我们就可以,在 package.json 中 扩展节点。
实例:

    "": {
        "scripts": {
            "wx-platform": { //编译平台配置,可通过cli方式
                "title":"微信服务号", // 平台,在HBuilderX中会在 运行/发行 中
                "env": {//环境变量
                    "UNI_PLATFORM": "mp-weixin"  //基准平台,仅限:h5、mp-weixin、mp-alipay、mp-baidu、mp-toutiao、mp-qq
                 },
                "define": { //条件编译
                    "WX-PLATFORM": true //条件编译常量,建议为大写
                }
            }
        }    
    }

Tips

使用平台
实例:

// #ifdef WX-PLATFORM
  console.log("微信服务号平台特有")
// #endif

本节课程我们主要学习了运行环境判断和当前运行平台的判断,分别 process.env.NODE_ENVuni.getSyInfoSync().platform 来进行判断。本节课程的重点如下:


联系我
置顶