2016-08-08 5 views
2

いくつかのプラグインは、api secretなどの値をconfig.xmlファイルに保存する必要がありますが、私のリポジトリのコミットが必要ではなく、別のファイルに配置して展開したい設定例config.xmlで変数を展開するPhoneGap

<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> 

答えて

0

ような何かを行うことができますどのように。

before_buildイベントとafter_buildイベントを有効にして、コンパイルする前に設定を効果的に編集し、プロセスが完了したら変更することができます。

これはテストされていないコードがあるが、それはこのようなものになります。

/scripts/before_build/config_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'); 
} 

/scripts/after_build/config_variables.jsを

#!/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); 
} 

/.variables.js

module.exports = { 
    FABRIC_API_KEY: 'blablabla', 
    FABRIC_API_SECRET: 'blablabla_secret', 
}; 

そして最後に、あなたが​​3210ファイル自体にこれらのフックを追加します。あなたはそれはあなたが.variables.jsでエクスポート対象から引っ張ってくる$ phonegap build {platform}を実行すると、設定を上書き今

<hook type="before_build" src="scripts/before_build/config_variables.js" /> 
<hook type="after_build" src="scripts/after_build/config_variables.js" /> 

、構築/コンパイルして、バックアップから編集した設定を置き換えます。

私は実際に私自身の使用にさらに一歩行って、複数のアプリの味のための異なる変数に引っ張るために、コマンドライン引数を使用:)

一つ最後のヒントを、あなたのフックが実行可能であることを確認してください。

+0

何らかの理由でビルドが失敗した場合でも、アフタービルドフックが常に呼び出されているかどうかを知っていますか(例えばCTRL + C) – rkmax

+0

残念ながら、そうではありませんので、ビルドに失敗した場合、 .xml。幸いなことに、VCSを使って簡単に修正することができますが、それでもやりがいのないVCSを使用している場合は、 –

関連する問題