Git 展开config.xml PhoneGap上的变量
一些插件需要在config.xml文件中使用api secret等值,但我不希望在我的repo中使用类似的提交,而是希望将它们放在不同的文件中,并在配置示例中展开Git 展开config.xml PhoneGap上的变量,git,cordova,phonegap-build,Git,Cordova,Phonegap Build,一些插件需要在config.xml文件中使用api secret等值,但我不希望在我的repo中使用类似的提交,而是希望将它们放在不同的文件中,并在配置示例中展开 <widget ...> ... <plugin name="cordova-fabric-plugin" spec="~1.0.8"> <variable name="FABRIC_API_KEY" value="blablabla" /> <vari
<widget ...>
...
<plugin name="cordova-fabric-plugin" spec="~1.0.8">
<variable name="FABRIC_API_KEY" value="blablabla" />
<variable name="FABRIC_API_SECRET" value="blablabla_secret" />
</plugin>
</widget>
...
我怎么能做这样的事
<widget ...>
...
<plugin name="cordova-fabric-plugin" spec="~1.0.8">
<variable name="FABRIC_API_KEY" value="${FABRIC_API_KEY}" />
<variable name="FABRIC_API_SECRET" value="${FABRIC_API_SECRET}" />
</plugin>
</widget>
...
如果有这么简单的功能,那就太棒了,但遗憾的是,我现在知道的唯一选择就是使用挂钩
您可以利用生成前
和生成后
事件在编译前有效地编辑配置,然后在过程完成后将其更改回
这是未经测试的代码,但看起来是这样的:
/scripts/before\u build/config\u variables.js
#!/usr/bin/env node
var fs = require('fs');
var variables = require('./../../.variables');
module.exports = function(context) {
var configPath = 'config.xml';
var configBackupPath = 'config.xml.backup';
var config = fs.readFileSync(configPath, 'ascii');
fs.writeFileSync(configBackupPath, config, 'ascii');
var tempConfig = config.replace(/\${(.*?)}/g, function (match, variableName) {
if (variables.hasOwnProperty(variableName)) {
return variables[variableName];
} else {
return match;
}
});
fs.writeFileSync(configPath, tempConfig, 'ascii');
}
#!/usr/bin/env node
var fs = require('fs');
module.exports = function(context) {
var configPath = 'config.xml';
var configBackupPath = 'config.xml.backup';
var realConfig = fs.readFileSync(configBackupPath, 'ascii');
fs.writeFileSync(configPath, realConfig, 'ascii');
fs.unlink(configBackupPath);
}
module.exports = {
FABRIC_API_KEY: 'blablabla',
FABRIC_API_SECRET: 'blablabla_secret',
};
/scripts/after\u build/config\u variables.js
#!/usr/bin/env node
var fs = require('fs');
var variables = require('./../../.variables');
module.exports = function(context) {
var configPath = 'config.xml';
var configBackupPath = 'config.xml.backup';
var config = fs.readFileSync(configPath, 'ascii');
fs.writeFileSync(configBackupPath, config, 'ascii');
var tempConfig = config.replace(/\${(.*?)}/g, function (match, variableName) {
if (variables.hasOwnProperty(variableName)) {
return variables[variableName];
} else {
return match;
}
});
fs.writeFileSync(configPath, tempConfig, 'ascii');
}
#!/usr/bin/env node
var fs = require('fs');
module.exports = function(context) {
var configPath = 'config.xml';
var configBackupPath = 'config.xml.backup';
var realConfig = fs.readFileSync(configBackupPath, 'ascii');
fs.writeFileSync(configPath, realConfig, 'ascii');
fs.unlink(configBackupPath);
}
module.exports = {
FABRIC_API_KEY: 'blablabla',
FABRIC_API_SECRET: 'blablabla_secret',
};
/.variables.js
#!/usr/bin/env node
var fs = require('fs');
var variables = require('./../../.variables');
module.exports = function(context) {
var configPath = 'config.xml';
var configBackupPath = 'config.xml.backup';
var config = fs.readFileSync(configPath, 'ascii');
fs.writeFileSync(configBackupPath, config, 'ascii');
var tempConfig = config.replace(/\${(.*?)}/g, function (match, variableName) {
if (variables.hasOwnProperty(variableName)) {
return variables[variableName];
} else {
return match;
}
});
fs.writeFileSync(configPath, tempConfig, 'ascii');
}
#!/usr/bin/env node
var fs = require('fs');
module.exports = function(context) {
var configPath = 'config.xml';
var configBackupPath = 'config.xml.backup';
var realConfig = fs.readFileSync(configBackupPath, 'ascii');
fs.writeFileSync(configPath, realConfig, 'ascii');
fs.unlink(configBackupPath);
}
module.exports = {
FABRIC_API_KEY: 'blablabla',
FABRIC_API_SECRET: 'blablabla_secret',
};
最后,将这些挂钩添加到config.xml
文件本身:
<hook type="before_build" src="scripts/before_build/config_variables.js" />
<hook type="after_build" src="scripts/after_build/config_variables.js" />
现在,当您运行$phonegap build{platform}
时,它将从您在.variables.js
中导出的对象中提取,覆盖配置,生成/编译,并从备份中替换已编辑的配置
实际上,我在自己的使用中更进一步,使用命令行参数为多个应用程序风格引入了不同的变量:)
最后一个技巧是,确保钩子是可执行的。您知道构建后钩子是否总是被调用,即使构建因任何原因(如CTRL+C)失败,但不幸的是,它们不是,因此如果构建失败,您最终将使用更改后的config.xml。幸运的是,如果您使用VCS进行跟踪,这是一个简单的解决方案,但至少说起来还是不方便的:/