Grunt and synchronized child processes

Очень удобный инструмент для простых задач, но если нужно сделать что-то нетривиальное — то бубен в помощь. Надо было мне из своего проекта сбилдить свеженький jquery и обработать его, но все пошло не по плану. В Grunt для выполнения таких задач есть утилита spawn которая порождает новый процесс и выполняет его асинхронно, без каких либо колбеков. На выбор есть модуль exec-sync, но он почемуто сказал, что у меня установлен какой-то неправильный nodejs и попытался его пересобрать, за что был послан в dev/null. Для выполнения задачи была приспособлена родная утилита async.


grunt.registerTask("build", function () {
	var done = this.async(),
		tasks = [];

	function callback() {
		grunt.log.ok("Callback fired!");
	}

	tasks.push(function(callback){
		require("child_process").exec("cmd", function (error, stdout, stderr) {
			if (stdout.length > 0) {
				grunt.log.writeln(stdout);
			}
			if (stderr.length > 0) {
				grunt.log.error(stderr);
			}
			callback(error);
		});
	});

	grunt.util.async.parallel(tasks, function(error) {
		callback();
		done(error);
	});
});

Теперь можно задать несколько асинхронных задач и выполнить callback после выполнения последней из них.

Комментарий “Grunt and synchronized child processes

Комментарии закрыты