tutorial serve que node instalar grunt javascript templates gruntjs continuous-integration google-closure-compiler

javascript - serve - Ejecutando un comando en una tarea de Grunt



javascript task runner (6)

Estoy usando Grunt (herramienta de compilación de línea de comandos basada en tareas para proyectos de JavaScript) en mi proyecto. Creé una etiqueta personalizada y me pregunto si es posible ejecutar un comando en ella.

Para aclarar, estoy tratando de usar plantillas de cierre y "la tarea" debe llamar al archivo jar para precompilar el archivo Soy en un archivo javascript.

Estoy ejecutando este jar desde la línea de comandos, pero quiero configurarlo como una tarea.


Alternativamente, puede cargar en plugins grunt para ayudar esto:

ejemplo de grunt-shell :

shell: { make_directory: { command: ''mkdir test'' } }

o grunt-exec ejemplo:

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 } }


Echa un vistazo a grunt.util.spawn :

grunt.util.spawn({ cmd: [''rm''], args: [''-rf'', ''/tmp''], }, function done() { grunt.log.ok(''/tmp deleted''); });


Encontré una solución, así que me gustaría compartirla contigo.

Estoy usando ronco debajo del nodo, por lo tanto, para llamar a los comandos de la terminal necesita requerir el módulo ''child_process''.

Por ejemplo,

var myTerminal = require("child_process").exec, commandToBeExecuted = "sh myCommand.sh"; myTerminal(commandToBeExecuted, function(error, stdout, stderr) { if (!error) { //do something } });


Los chicos apuntan a child_process, pero intentan usar execSync para ver la salida.

grunt.registerTask(''test'', '''', function () { var exec = require(''child_process'').execSync; var result = exec("phpunit -c phpunit.xml", { encoding: ''utf8'' }); grunt.log.writeln(result); });



Si está utilizando la última versión de grunt (0.4.0rc7 en el momento de escribir esto), tanto grunt-exec como grunt-shell fallan (no parecen estar actualizados para manejar el último gruñido). Por otro lado, el ejecutor de child_process es asincrónico, lo cual es una molestia.

Terminé usando la solución de Jake Trent y añadí shelljs como una dependencia de desarrollo en mi proyecto, así que solo podía ejecutar pruebas de forma fácil y sincrónica:

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''); });