gruntjs - started - npm install grunt-cli
gruñido integrador con hormiga (3)
¿Hay buenos tutoriales para integrar gruñido con hormiga? Nuestra compilación actual utiliza ant 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 construcción del front-end. Necesito integrar la compilación de front-end con la compilación de hormigas. Necesito saber cómo normalizar los códigos de salida para todas mis tareas personalizadas, así como las tareas integradas de Grunt y limitar la salida de la consola a estos códigos predefinidos cuando las tareas de Grunt son llamadas por ant. Cualquier ayuda sería muy apreciada.
Grunt puede llamar a la línea de comandos, por lo que puede crear fácilmente varias tareas en grunt que no hacen más que ejecutar una tarea ant a través del shell.
La biblioteca grunt-shell
facilita especialmente la ejecución de comandos externos desde una tarea grunt: https://github.com/sindresorhus/grunt-shell
Sin embargo, ya que está hablando de códigos de salida personalizados, probablemente tendrá que escribir su propia tarea grunt personalizada que ejecuta un comando de shell y luego mira el código de respuesta (tal vez utilizando el ayudante grunt.helpers.spawn
): https://github.com/gruntjs/grunt/blob/master/docs/api_utils.md#gruntutilsspawn
¿Mi consejo? Mi organización recientemente pasó por lo mismo y, si es posible, es mejor simplemente romper con la hormiga y deshacerse de ella por completo para sus proyectos relacionados con JavaScript.
Grunt tiene una biblioteca de complementos tan creciente y útil que me sorprendería si no pudiera duplicar sus archivos de compilación de hormigas y crear una solución 100% javascript.
Podrías usar 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://.com/a/10359327/227349 -->
<!-- Forces node''s stderror and stdout to a temporary file -->
<arg line=" > _tempfile.out 2<&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 & del _tempfile.out & exit /b 1)"/>
<!-- Otherwise, just type the temporary file and delete it-->
<arg line=" & type _tempfile.out & del _tempfile.out &"/>
</exec>
<exec executable="@{module}" failonerror="@{failonerror}" osfamily="unix">
<args/>
</exec>
</sequential>
</macrodef>
Y puedes llamar a cualquier comando: ejemplo:
<target name="jshint">
<exec-node module="grunt">
<arg value="jshint" />
</exec-node>
</target>
funciona como un amuleto: también garantiza que el stderr también se imprima, lo cual es un problema común cuando se dice grunt.
puede usar http://abc.tools.qafoo.com/ que incluye un módulo npm * 1)
Lo único que necesitas es un objetivo personalizado 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 eso, puede ejecutar grunt en .npm/node_modules/.bin/
directory alias ${npm.local.modulesdir}/.bin/
^^ No se pierda la inclusión o definición de propiedades desde src/main/resources/extensions/npm/npm.properties
* 1): desafortunadamente con la versión actual de node.js