Ora ho il mio setup Gruntfile per eseguire alcune funzioni di rilevamento automatico come l'analisi dei file sorgente per analizzare alcuni sorgenti PHP nel roder per capire in modo dinamico i nomi dei file e i percorsi che devo conoscere prima di eseguire grunt.initConfig()
.Come posso eseguire un'operazione asincrona prima di grunt.initConfig()?
Purtroppo lo grunt.initConfig()
non sembra essere pensato per essere eseguito in modo asincrono, quindi non vedo alcun modo di eseguire il mio codice asincrono prima di poterlo chiamare. C'è un trucco per realizzare questo o devo riscrivere le mie routine di rilevamento in modo sincrono? C'è un modo semplice per bloccare l'esecuzione prima che il mio callback sia arrivato?
All'interno di attività grunt c'è ovviamente this.async()
, ma per initConfig()
non funziona.
Ecco un esempio ridotta:
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(...);
});
};
Delle buone idee su come ottenere questo fatto?
Grazie mille!
Cosa succede se hai appena messo grunt.initconfig e grunt.loadnpmtasks ecc nella richiamata dalla funzione asincrona? –
Non è quello che ho fatto sopra? Quello che succede è che grunt non aspetta la mia callback, quindi 'grunt.initConfig()' ecc non sarà chiamato prima che il client grunt ritorni. – leyyinad
Oh sì, l'ho fatto, mio errore ... –