Jetzt habe ich mein Gruntfile-Setup, um einige automatische Erkennung Magie wie Parsing Quelldateien zu Parsing einige PHP-Quellen in Roder zu dynamisch herauszufinden, Dateinamen und Pfade, die ich wissen müssen, bevor grunt.initConfig()
ausgeführt.Wie kann ich eine asynchrone Operation vor grunt.initConfig() durchführen?
Leider grunt.initConfig()
scheint nicht asynchron ausgeführt werden, so sehe ich keine Möglichkeit, meine asynchronen Code ausgeführt werden, bevor ich es aufrufen kann. Gibt es einen Trick, um dies zu erreichen, oder muss ich meine Erkennungsroutinen synchron umschreiben? Gibt es eine einfache Möglichkeit, die Ausführung zu blockieren, bevor mein Rückruf angekommen ist?
Inside Grunt Aufgaben gibt es natürlich this.async()
, aber für initConfig()
das funktioniert nicht.
Hier ist eine abgespeckte Beispiel:
function findSomeFilesAndPaths(callback) {
// async tasks that detect and parse
// and execute callback(results) when done
}
module.exports = function (grunt) {
var config = {
pkg: grunt.file.readJSON('package.json'),
}
findSomeFilesAndPaths(function (results) {
config.watch = {
coffee: {
files: results.coffeeDir + "**/*.coffee",
tasks: ["coffee"]
// ...
}
};
grunt.initConfig(config);
grunt.loadNpmTasks "grunt-contrib-coffee"
// grunt.loadNpmTasks(...);
});
};
gute Ideen, wie dies zu tun bekommen?
Vielen Dank!
Was passiert, wenn Sie nur setzen grunt.initconfig und grunt.loadnpmtasks usw. in dem Rückruf von der Asynchron-Funktion? –
Ist das nicht, was ich oben getan habe? Was passiert, ist, dass grunt nicht auf meinen Rückruf wartet, also wird 'grunt.initConfig()' usw. nicht aufgerufen, bevor der grunt-Client zurückkehrt. – leyyinad
Oh ja du hast, mein Fehler ... –