cordova - 用于调试和发布的 Apache Cordova : use different settings in config. xml

标签 cordova

我正在寻找一种在 config.xml 中使用不同设置的方法。文件:调试版本的一些设置和发布版本的其他设置。

例如,我需要将其用于调试构建:

<content src="https://staging.mywebsite.com" />

并更改为发布版本:
<content src="https://www.mywebsite.com" />

我还需要更改一些 <preference /> 中的值和 <variable />标签

Cordova-CLI 的 build命令似乎没有任何参数来指定 config.xml用于构建

目前,我能找到的唯一方法是重命名我的 config.xmlconfig-debug.xml , 复制到 config-release.xml并更改其中的一些值。当我需要构建时,将要使用的 xml 重命名为 config.xml
这不是很方便:/

最佳答案

如果您使用在命令行中定义的不同环境,您可以创建一个模板 config.xml (文件是 config.tpl.xml )和 before_prepare cordova 钩子(Hook)用正确的值替换模板中的变量并将生成的内容保存在 config.xml .

钩子(Hook)是:

#!/usr/bin/env node
var fs = require('fs');
var path = require('path');
var compile = require('es6-template-strings/compile');
var resolveToString = require('es6-template-strings/resolve-to-string');

var ROOT_DIR = process.argv[2];
var FILES = {
    SRC: "config.tpl.xml",
    DEST: "config.xml"
};

var env = process.env.NODE_ENV || 'dev';
var envFile = 'src/environments/environment.' + env + '.json';

var srcFileFull = path.join(ROOT_DIR, FILES.SRC);
var destFileFull = path.join(ROOT_DIR, FILES.DEST);
var configFileFull = path.join(ROOT_DIR, envFile);

var templateData = fs.readFileSync(srcFileFull, 'utf8');

var configData = fs.readFileSync(configFileFull, 'utf8');
var config = JSON.parse(configData);

var compiled = compile(templateData);
var content = resolveToString(compiled, config);

fs.writeFileSync(destFileFull, content);

我使用环境变量为NODE_ENV在这里,如果您使用另一个(如 APP_ENV )只需在上面的 Hook 中进行相应的更改。钩子(Hook)从 src/environments/environment.[env].json 加载一个 json ,如 environment.dev.jsonenvironment.prod.json (可以在上面的钩子(Hook)中更改)。

config.tpl.xml :

<content src="${CONTENT_URL}" />

它会变成 ${CONTENT_URL}根据使用的环境文件进入正确的 url(您需要在环境 json 文件中有一个属性 CONTENT_URL)。

如需更多信息,请参阅 https://stackoverflow.com/a/46345926/4850646

关于cordova - 用于调试和发布的 Apache Cordova : use different settings in config. xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39538148/

相关文章:

Javascript 全局变量不会在回调函数之外保持更改

javascript - ng-model 默认正确,但 select 不会显示文本,而是显示空白

android - 无法从 phonegap : android 中的 sdcard 读取图像文件

javascript - Cordova iOS Webview 预加载声音?

cordova - 构建失败的ionic 2

iOS/ Cordova : InAppBrowser not working

cordova - 为什么node js用于cordova?

ios - Cordova 应用程序未显示在共享列表 IOS 中

ios - PhoneGap - 在 iOS 模拟器中选择特定的硬件设备

iframe - 可以在 iframe 中访问 Phonegap API 吗?