Wie man ein Grunt-task nach meinem Yeoman-generator, die Installation abgeschlossen hat?
Ich Baue eine custom-Yeoman-generator, installiert eine Menge von pre-processed Sprache Compiler wie CoffeeScript, LESS und Jade. Im Gruntfile, dass mein generator erzeugt habe ich einen build-task, die kompiliert alles. Bis jedoch die, dass die build-Aufgabe ist mindestens einmal ausgeführt, wird das kompilierte HTML -, CSS-und Javascript-Dateien, die nicht existieren, die verwirrend sein kann, wenn ich versuche zu laufen, der grunt watch/connect-server nach frisch Gerüst.
Was ist der beste Weg, um meinen generator laufen, dass Grunt build-Schritt am Ende der installation? Die end
event, das bereits verwendet wird, zu nennen this.installDependencies
scheint der richtige Ort, das zu tun, aber wie soll ich kommunizieren mit Grunzen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Folgen Sie den Stapel
this.installDependencies
schließlich arbeitet seinen Weg nach unten zu https://github.com/yeoman/generator/blob/45258c0a48edfb917ecf915e842b091a26d17f3e/lib/actions/install.js#L36:Jagen diese weiter nach unten,
this.spawnCommand
kommt aus https://github.com/yeoman/generator/blob/master/lib/actions/spawn_command.js:In anderen Worten, in deiner code-Generator, können Sie rufen Sie
this.spawnCommand
jederzeit, und übergeben Sie die Argumente, die Sie wünschen terminal zu laufen. Wie inthis.spawnCommand('grunt', ['build'])
.Also dann die nächste Frage, wo legst du das? Denken Linear, Sie kann nur darauf Vertrauen, dass
grunt build
wird die Arbeit nach allen Ihren Abhängigkeiten installiert wurden.Vom https://github.com/yeoman/generator/blob/45258c0a48edfb917ecf915e842b091a26d17f3e/lib/actions/install.js#L67-69,
this.installDependencies
akzeptiert einen Rückruf, so dass Ihr code könnte wie folgt Aussehen:Give it a shot! Wenn alles gut geht, sollten Sie einige Fehlerbehandlung auf der neuen
this.spawnCommand
anrufen, um sicher zu sein.this
Gültigkeitsbereich verliert. Ich ursprünglich erstellt eine variable zum Zwischenspeichernthis
in den richtigen Bereich und verwendet, um zu rufenspawnCommand
. Jedoch entschied ich mich fürbind()
statt, da wäre es sauberer. Ich habe bearbeitet die Antwort, um diese zu reflektieren.Habe ich verwendet Stephen ' s Super Antwort, in der folgenden Weise implementiert mit einem benutzerdefinierten Ereignis, um Ordnung zu halten.
Diese Frage ist ein bisschen alt schon, aber ich immer noch wollen, um diese Ergänzung zu machen, wenn jemand es verpasst. Nach der Installation Prozesse sind nun wesentlich einfacher zu implementieren. Haben Sie einen Blick auf die run loop und verwenden Sie die
end
Methode, bei der Sie alle nach der Installation Dinge.