Выполнение команды в задаче Grunt
Я использую грунт (инструмент построения командной строки на основе задач для проектов JavaScript) в моем проекте. Я создал пользовательский тег, и мне интересно, можно ли запустить в него команду.
чтобы уточнить, я пытаюсь использовать шаблоны закрытия, и" задача " должна вызвать файл jar для предварительной компиляции файла Soy в файл javascript.
Я запускаю эту банку из командной строки, но я хочу установить ее как задачу.
6 ответов:
в качестве альтернативы вы можете загрузить в Grunt плагины, чтобы помочь этому:
grunt-shell пример:
shell: { make_directory: { command: 'mkdir test' } }
или grunt-exec пример:
exec: { remove_logs: { command: 'rm -f *.log' }, list_files: { command: 'ls -l **', stdout: true }, echo_grunt_version: { command: function(grunt) { return 'echo ' + grunt.version; }, stdout: true } }
проверить
grunt.util.spawn
:grunt.util.spawn({ cmd: 'rm', args: ['-rf', '/tmp'], }, function done() { grunt.log.ok('/tmp deleted'); });
Я нашел решение, поэтому я хотел бы поделиться с вами.
Я использую grunt под узлом, поэтому для вызова команд терминала вам нужно потребовать модуль 'child_process'.
например,
var myTerminal = require("child_process").exec, commandToBeExecuted = "sh myCommand.sh"; myTerminal(commandToBeExecuted, function(error, stdout, stderr) { if (!error) { //do something } });
Если вы используете последнюю версию grunt (0.4. 0rc7 на момент написания этой статьи), оба grunt-exec и grunt-shell не работают (они, похоже, не обновляются для обработки последнего grunt). С другой стороны, метод exec child_process является асинхронность, которая является проблемой.
Я в конечном итоге с помощью решение Джейка Трента, и добавив shelljs как зависимость dev от моего проекта, чтобы я мог просто запускать тесты легко и синхронно:
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'); });
ребята указывают child_process, но попробуйте использовать execSync чтобы увидеть выход..
grunt.registerTask('test', '', function () { var exec = require('child_process').execSync; var result = exec("phpunit -c phpunit.xml", { encoding: 'utf8' }); grunt.log.writeln(result); });
для асинхронных команд оболочки, работающих с Grunt 0.4.X использование https://github.com/rma4ok/grunt-bg-shell.