为cordova配置构建风格

bihw5rsg  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(144)

嗨,这个问题很可能只是一个 cordova 问题。我见过类似的问题,但从来没有一个满意的答案。
我的最终目标是,用一种简单的方法来构建Android、iOS和Windows Phone应用程序的多种风格。
我最大的要求是:

  • 更改名称空间。因此config.xml中的小部件属性最好被覆盖。名称和描述也会有所帮助。
  • 生成不同的图标和闪屏。我可能会设置与我使用的包名相关的目录。在这里放置一个高分辨率的闪屏和图标,使用ionic的resources命令生成正确的文件。
  • 根据目标更改配色方案
  • 动态配置(可选)。

我现在所做的就是在我的webpack.config中添加一些代码(我的ionic项目使用webpack)。
这可能是最糟糕的实现方式,但我只需要一个工作原型

var flavour = "some.namespace.dir";
var ENV = "TEST";

for(var i = 0; i < args.length ; i++) {
    if (args[i] == "--env") {
        if (args[i+1]) {
            ENV = args[i+1];
        }
    }

    if (args[i] == "--flavour") {
        if (args[i+1]) {
            flavour = args[i+1];
        }
    }
}

因此,这将检查节点命令是否有任何--flavour或--env标志来设置这些属性。

var config =
    JSON.parse(
        require('fs').readFileSync(
            require('path').resolve(
                __dirname,
                'flavours/' + flavour + ".json"),
            'utf8'));

我有一个json对象,我可以在这里放任何东西,所以为了做自定义样式,我们可以使用sass加载器。

sassLoader: {
    includePaths: [
        'node_modules/ionic-angular',
        'node_modules/ionicons/dist/scss'
    ],
    data: "$custom-primary: " + config.colorPrimary + " ; $custom-accent: " + config.colorAccent + " ;"
},

因此,这实际上允许我将变量添加到sass构建中,太棒了!至于配置:

new DefinePlugin({
   'ENV': JSON.stringify(ENV),
   'appConfig': JSON.stringify(config)
})

所以我有这些东西,我可以用它们来让应用程序内部的逻辑特定于一种口味。
我很想听听人们对我的实现有多失望,如果他们有改进的建议。
到目前为止,我还在考虑是否需要一个bash脚本来更改config.xml和资源。我可以使用一个模板文件来替换名称空间,或者在“flavor”文件夹中创建config.xml文件并将其复制到适当的位置。
有什么建议或者wtf的人可以分享吗?就目前而言,我可能会使用config in each directory的方法,以及参考资料。这样我就可以只点击一个bash文件来编译和签署任何风格。

hc8w905p

hc8w905p1#

要从config.xml中读取应用程序ID,可以使用以下JS代码片段。

const fs = require('fs').promises;
const xml2js = require('xml2js');

async function getAppId() {
    const data = await fs.readFile('config.xml') ;
    const parser = new xml2js.Parser();
    const result = await parser.parseStringPromise(data);
    const appId = result.widget['$'].id;
    return appId
}

相关问题