W moim projekcie używam Grunt (narzędzie do tworzenia wiersza poleceń oparte na zadaniach dla projektów JavaScript). Utworzyłem niestandardowy tag i zastanawiam się, czy można uruchomić na nim polecenie.
Aby wyjaśnić, próbuję użyć szablonów zamknięcia i „zadanie” powinno wywołać plik jar, aby wstępnie skompilować plik Soy do pliku javascript.
Uruchamiam ten jar z wiersza poleceń, ale chcę ustawić go jako zadanie.
grunt-shell
do pracy z Windows + Cygwin, ale miałem więcej szczęściagrunt-exec
."exec:cmd1", "exec:cmd2"
wtedy też masz synchroniczne zamówienie.Sprawdź
grunt.util.spawn
:grunt.util.spawn({ cmd: 'rm', args: ['-rf', '/tmp'], }, function done() { grunt.log.ok('/tmp deleted'); });
źródło
opts: {stdio: 'inherit'},
można zobaczyć wynik poleceniagrunt-legacy-util
wtyczki. Zaleca użycierequire('child_process').spawn()
zamiast tego.Znalazłem rozwiązanie, więc chcę się z Tobą podzielić.
Używam grunt pod węzłem, więc aby wywołać polecenia terminala, musisz wymagać modułu „child_process”.
Na przykład,
var myTerminal = require("child_process").exec, commandToBeExecuted = "sh myCommand.sh"; myTerminal(commandToBeExecuted, function(error, stdout, stderr) { if (!error) { //do something } });
źródło
sh
wcześniej,sh mayCommand.sh
nie jestem pewien, czy będzie działać wJeśli używasz najnowszej wersji gruntowej (0.4.0rc7 w chwili pisania tego tekstu), zarówno grunt-exec, jak i grunt-shell zawodzą (nie wydaje się, aby zostały zaktualizowane, aby obsługiwać najnowszy grunt). Z drugiej strony, exec child_process jest async, co jest kłopotliwe.
Skończyło się na tym , że użyłem rozwiązania Jake'a Trenta i dodałem shelljs jako zależność deweloperską do mojego projektu, więc mogłem po prostu łatwo i synchronicznie wykonywać testy:
var shell = require('shelljs'); ... grunt.registerTask('jquery', "download jquery bundle", function() { shell.exec('wget http://jqueryui.com/download/jquery-ui-1.7.3.custom.zip'); });
źródło
grunt-shell
działa dobrzegrunt v0.4.5
pod WindowsFaceci wskazują child_process, ale spróbuj użyć execSync, aby zobaczyć wyjście.
grunt.registerTask('test', '', function () { var exec = require('child_process').execSync; var result = exec("phpunit -c phpunit.xml", { encoding: 'utf8' }); grunt.log.writeln(result); });
źródło
W przypadku poleceń powłoki asynchronicznej działających z Grunt 0.4.x użyj https://github.com/rma4ok/grunt-bg-shell .
źródło