2016-08-08 11 views
2

Einige Plugins müssen Werte wie api secret und mehr in der Datei config.xml haben, aber ich möchte keine Commits wie diese auf meinem Repo, stattdessen möchte ich sie in einer anderen Datei platzieren und erweitern Beispiel ConfigErweitern Variablen auf 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> 

Wie ich so etwas wie

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

Antwort

0

tun können Es wäre genial, wenn es eine solche einfache Funktion war, aber leider die einzige Option, die ich an dieser Stelle wissen würde Haken zu verwenden.

Sie können die Ereignisse before_build und after_build verwenden, um Ihre Konfiguration vor dem Kompilieren effektiv zu bearbeiten und sie dann wieder zu ändern, sobald der Prozess abgeschlossen ist.

Dies ist ungetestet Code, aber es würde wie folgt aussehen:

/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

/.variables.js

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

Und schließlich würden Sie diese Haken in die config.xml Datei selbst hinzufügen:

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

Wenn Sie jetzt $ phonegap build {platform} führen Sie es von dem Objekt ziehen werden Sie in .variables.js exportieren, die Config überschrieben werden soll, bauen/kompilieren und ersetzen Sie die bearbeitete Konfiguration aus der Sicherung.

Ich ging tatsächlich einen Schritt weiter in meinem eigenen Gebrauch und verwendet Befehlszeilenargumente in verschiedenen Variablen für mehrere App Aromen zu ziehen :)

Ein letzter Tipp, stellen Sie sicher, dass Ihre Haken ausführbar sind.

+0

Wissen Sie, ob die after build Hooks immer aufgerufen werden, auch wenn der Build aus irgendeinem Grund fehlschlägt (zB. CTRL + C) – rkmax

+0

Leider sind sie nicht, also wenn der Build fehlschlägt, würden Sie mit einer geänderten Konfiguration enden .xml. Zum Glück, wenn Sie mit einem VCS verfolgen, das ist eine einfache Lösung, aber immer noch unbequem: –

Verwandte Themen