Теперь у меня есть моя настройка Gruntfile для выполнения некоторой магии автоматического обнаружения, например, для разбора исходных файлов для анализа некоторых источников PHP в roder для динамического определения имен файлов и путей, которые мне нужно знать перед запуском grunt.initConfig()
.Как выполнить асинхронную операцию перед grunt.initConfig()?
К сожалению, grunt.initConfig()
не предназначен для асинхронного запуска, поэтому я не вижу способа выполнить мой асинхронный код, прежде чем я могу его назвать. Есть ли уловка для этого или мне приходится переписывать мои процедуры обнаружения синхронно? Есть ли простой способ блокировать выполнение до моего обратного вызова?
Внутри задачи вальмы есть, конечно, this.async()
, но для initConfig()
это не работает.
Вот разобранный пример:
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(...);
});
};
Есть хорошие идеи, как получить это сделано?
Большое спасибо!
Что произойдет, если вы просто положить grunt.initconfig и grunt.loadnpmtasks и т.д. в функции обратного вызова от функции асинхронной? –
Разве это не то, что я сделал выше? Случается, что grunt не ждет моего обратного вызова, поэтому 'grunt.initConfig()' и т. Д. Не будет вызываться до возвращения клиента grunt. – leyyinad
О да, вы сделали, моя ошибка ... –