2015-01-18 1 views
6

Gibt es eine Möglichkeit zu fangen, wenn eine GruntJS-Aufgabe fehlschlägt und darauf zu reagieren?Try-Catch Aufgaben in GruntJS

Die --force Flagge hilft nicht, denn ich muss wissen, ob etwas auf dem Weg brach, und etwas dagegen tun.

Ich habe versucht, eine Anordnung ähnlich wie ein Versuch zu fangen, aber es funktioniert nicht. Das liegt daran, dass grunt.registerTask Aufgaben in eine Warteschlange verschiebt - die Ausführung ist nicht synchron.

grunt.registerTask('foo', "My foo task.", function() { 
    try { 
     grunt.task.run('bar'); 
    } catch (ex) { 
     // Handle the failure without breaking the task queue 
    } 
    }); 

Kreative JavaScript-Ideen sind ebenso willkommen wie GruntJS Know-how.

+1

Es sieht aus wie die [Ereignis-API] (http: // gruntjs .com/api/grunt.event) ist das, was Ihnen letztendlich erlauben wird, dies zu tun, aber das ist nicht geplant, bis v0.5 fertig zu werden [entsprechend dem Problem-Rückstand] (https://github.com/gruntjs/ grunt/issues/1167). – jakerella

+0

@jakerella Ziemlich leider sind Sie richtig. – pilau

Antwort

0

Ich habe es nicht getestet, aber wie in jedem Javascript-Code Sie könnten ein Ereignis-Listener hinzufügen von Aufgaben Objekt und Brandereignis grunzen, wenn Sie es brauchen ...

Sie wissen nicht, wenn Das könnte genau zu Ihrer Frage passen, aber ich würde es versuchen.

Hoffe es hilft!

+0

Also ... wo genau mache ich das? Grunt Code ist mir nicht – pilau

+0

nur so etwas wie den Einsatz versuchen 'require ("Events");' und dann einige Code schreiben wie diese 'grunt.on ("taskFailed", Funktion (message) { console.error (“ Fehler gefunden "+ Nachricht) });' und in jeder Aufgabe verwenden 'grunt.emit (" taskFailed ", Nachricht);' Es ist nur eine Idee also, wenn Sie einen Ergebnis-Kommentar erhalten! haha – Xavis

+0

Aber die Aufgaben sind 3rd-Party-Bibliotheken zu ... – pilau

1

sollte dieses hässliche Tier für Sie arbeiten:

grunt.registerMultiTask('foo-task', 'my foo task', function() { 
    try { 
     console.log(this.data); 
     throw new Error('something bad happened!'); 
    } catch (e) { 
     console.log('Ooops:', e); 
    } 

    return true; 
    }); 

    grunt.registerTask('foo', 'Runs foo.', function() { 
    grunt.config('foo-task', { 
     hello: 'world' 
    }); 
    grunt.task.run('foo-task'); 
    }); 

Run es über: grunt foo

Ausgang:

Running "foo" task 

Running "foo-task:hello" (foo-task) task 
world 
Ooops: Error: something bad happened! 
    at Object.<anonymous> 

    <stacktrace here>  

Done, without errors.