Ionic 5:获得内置平台的最佳实践

时间:2020-10-14 15:28:47

标签: javascript angular cordova ionic-framework

我正在使用Ionic 5,Angular和Cordova编写应用程序。我想获取用于构建我的应用程序的“平台”变量(即,在诸如“ ionic cordova build android”之类的命令中使用的参数。

不幸的是,我在网上发现的只是平台服务(https://ionicframework.com/docs/angular/platform),它很有用,但并不是我所需要的(例如,如果应用程序在网上运行,则platform.is('android')可以返回true) Android手机,Android手机浏览器上的应用程序,或者如果我在Chrome浏览器上单击F12 ...)。 我需要的是找到构建应用程序的平台。

我发现达到结果的最佳方法是在ionic.config.json文件中添加“ build:before”钩子

  "hooks": {
    "build:before": "scripts/build-before.js",
    "build:after": "scripts/build-after.js"
   }

并在构建之前更改服务中的常量

#!/usr/bin/env node
var process = require('process');
var fs = require('fs');

let input=process.argv;

let android="android";
let browser="browser";
let ios="ios";
let platformFile="MYFILE"


module.exports = function() {
    let nbArgs=input.length;
    let platform;
    for(let i=0;i<nbArgs;i++){
        if(input[i]==android){
            platform=android;
        }
        if(input[i]==browser){
            platform=browser;
        }
        if(input[i]==ios){
            platform=ios;
        }
    }

    let file = fs.readFileSync(platformFile, 'utf8');
    let replacement="MYSTART '"+platform+"';";
    let result = file.replace(/MYREGEX/g, replacement);
    fs.writeFileSync(platformFile, result);

    console.log("Service updated with platform: "+platform);
}

然后在构建中:按原样还原文件后(避免在每次构建后在GIT上提交文件...)。

我添加了代码,以防有人遇到相同的问题并寻求快速的解决方法。

我的问题是:有谁知道官方/更智能的方法来实现结果?

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定您的目标是什么,但是检测应用程序运行的平台要比这简单得多。例如,如果您想知道该应用程序是否正在 Android移动设备上执行,则可以使用以下条件:

if(this.platform.is('mobile') && this.platform.is('android')) {
  // ...
}

以类似的方式,您可以根据以下列表检查设备是desktoppwa,...还是任何其他组合:

https://ionicframework.com/docs/angular/platform#platforms

android:    a device running Android
capacitor:  a device running Capacitor
cordova:    a device running Cordova
desktop:    a desktop device
electron:   a desktop device running Electron
hybrid:     a device running Capacitor or Cordova
ios:        a device running iOS
ipad:       an iPad device
iphone:     an iPhone device
mobile:     a mobile device
mobileweb:  a web browser running in a mobile device
phablet:    a phablet device
pwa:        a PWA app
tablet:     a tablet device