Ich habe einen App-Ordner mit mehreren Unterordnern. Ich durchlaufe diese Ordner und versuche, einen Shell-Befehl für jeden Ordner auszuführen. Dies ist, was ich bisher:Wie man Shell-Befehle innerhalb einer Schleife in Grunt ausführt?
grunt.registerTask('deploy', function() {
var done = this.async();
var exec = require('child_process').exec;
// Start deployment
grunt.log.write('Starting deployment...').ok();
// Read all subdirectories from the app folder
grunt.file.expand("./app/*").forEach(function (dir) {
// Get folder name
var functionName = dir.split('/')[2];
exec('echo ' + functionName, {
cwd: dir
}, function(error, stdout, stderr) {
grunt.log.ok(functionName+' deployed.');
done();
});
});
});
Was ich in meinem Terminal erwarten würde, ist aus jedem Ordnernamen zu drucken, aber alles, was ich habe ist der Rückruf in der exec-Funktion, wie folgt aus:
Running "deploy" task
Starting deployment...OK
>> testA deployed.
>> testB deployed.
Ich bin mir nicht sicher, was ich falsch mache.
Danke, das macht Sinn, aber es funktioniert immer noch nicht richtig. Wenn ich 3 Ordner habe, werden manchmal nur zwei von ihnen verarbeitet, bevor der Grunt beendet wird, also stimmt auch etwas mit dem Async-Teil nicht. – passatgt
Sie rufen 'done()' im Befehlsrückruf auf, so dass die Aufgabe nach der ersten ausgeführt wird. –