2012-08-27 24 views
16

¿Hay buenos tutoriales para integrar gruñido con hormiga? Nuestra construcción actual usa hormiga porque somos una tienda de Java. Sin embargo, el front-end está comenzando a convertirse en un ciudadano de primera clase, y estamos examinando el uso de node y grunt para la compilación front-end. Necesito integrar la compilación de front-end con la construcción de ant. Necesito saber cómo normalizar los códigos de salida para todas mis tareas personalizadas, así como las tareas grupales integradas y limitar la salida de la consola a estos códigos predefinidos cuando las tareas grupales son llamadas por hormiga. Cualquier ayuda sería muy apreciada.integrando gruñido con ant

Respuesta

2

Grunt puede llamar a la línea de comandos, por lo que puede crear fácilmente varias tareas en gruñido que no hacen más que ejecutar una tarea ant a través del shell.

La biblioteca grunt-shell hace que sea especialmente fácil de ejecutar comandos externos desde una tarea ronco: https://github.com/sindresorhus/grunt-shell

Ya que estamos hablando de códigos de salida a medida, sin embargo, es probable que va a tener que terminar de escribir su propia ronco personalizada tarea que ejecuta un comando de shell y luego mira el código de respuesta (quizás usando el ayudante grunt.helpers.spawn): https://github.com/gruntjs/grunt/blob/master/docs/api_utils.md#gruntutilsspawn

¿Mi consejo? Mi organization recently went through the same thing y lo mejor es, si es posible, simplemente hacer un descanso limpio de la hormiga y deshacerse de ella por completo para sus proyectos relacionados con JavaScript.

Grunt tiene una biblioteca de plugins tan creciente y útil Me sorprendería que no pudieras duplicar tus archivos de compilación ant y crear una solución 100% javascript.

+5

También estoy en una tienda de Java y esta es una venta difícil. Aunque el front-end también está aumentando en importancia para nosotros, es poco probable que cambiemos a JS como nuestro lenguaje de compilación para el código del lado del servidor. Un enfoque más realista parece ser invocar gruñidos a través de una tarea de hormiga personalizada. Por otro lado, no veo a nadie haciendo esto, así que ... – carbontax

0

puede utilizar http://abc.tools.qafoo.com/ que incluye un módulo de NPM * 1)

El único caso es necesario es un objetivo a medida como:

… 

<target 
    name="-mm:compile:main~hooked" 
    extensionOf="-compile:main~hook" 
    depends=" 
     -my-compile-npm-hook 
    " 
> 

<target 
    name="-my-compile-npm-hook" 
> 
    <echo>install local grunt-cli</echo> 
    <antcall target="npm:install"> 
     <param name="in.npm.package.name" value="grunt-cli" /> 
    </antcall> 
</target> 

… 

después de que usted puede ser que funcione ronco en los .npm/node_modules/.bin/ alias de directorio ${npm.local.modulesdir}/.bin/ ^^ no se pierda para incluir o definir las propiedades de src/main/resources/extensions/npm/npm.properties

* 1): unfortunatly buggy con la versión actual Node.js

14

Usted podría utilizar esta macro:

<macrodef name="exec-node"> 
    <attribute name="module" description="The name of the NodeJS module to execute"/> 
    <attribute name="failonerror" default="true" description="Fail if the exit code is not 0"/> 
    <element name="args" implicit="yes" description="Argument to pass to the exec task"/> 
    <sequential> 
     <exec executable="cmd.exe" failonerror="@{failonerror}" osfamily="winnt"> 
      <arg line="/c @{module}" /> 
      <args/> 

      <!-- Windows cmd output workaround: http://stackoverflow.com/a/10359327/227349 --> 
      <!-- Forces node's stderror and stdout to a temporary file --> 
      <arg line=" &gt; _tempfile.out 2&lt;&amp;1"/> 

      <!-- If command exits with an error, then output the temporary file  --> 
      <!-- to stdout delete the temporary file and finally exit with error level 1 --> 
      <!-- so that the apply task can catch the error if @failonerror="true"  --> 
      <arg line=" || (type _tempfile.out &amp; del _tempfile.out &amp; exit /b 1)"/> 

      <!-- Otherwise, just type the temporary file and delete it--> 
      <arg line=" &amp; type _tempfile.out &amp; del _tempfile.out &amp;"/> 
     </exec> 
     <exec executable="@{module}" failonerror="@{failonerror}" osfamily="unix"> 
      <args/> 
     </exec> 
    </sequential> 
</macrodef> 

Y usted puede llamar a cualquier comando: ejemplo:

<target name="jshint"> 
    <exec-node module="grunt"> 
     <arg value="jshint" /> 
    </exec-node> 
</target> 

funciona como un encanto: también asegura también se imprime el stderr, que es un común problema al llamar gruñido.