我正在寻找一种在 config.xml
中使用不同设置的方法。文件:调试版本的一些设置和发布版本的其他设置。
例如,我需要将其用于调试构建:
<content src="https://staging.mywebsite.com" />
并更改为发布版本:
<content src="https://www.mywebsite.com" />
我还需要更改一些
<preference />
中的值和 <variable />
标签Cordova-CLI 的
build
命令似乎没有任何参数来指定 config.xml
用于构建目前,我能找到的唯一方法是重命名我的
config.xml
至config-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.json
或 environment.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/