2012-08-27 17 views
16

Esistono buoni tutorial per integrare il grunt con la formica? La nostra attuale build usa ant perché siamo un negozio Java. Tuttavia, il front-end sta iniziando a diventare un cittadino di prima classe, e stiamo esaminando l'uso di node e grunt per la build del front-end. Ho bisogno di integrare la build front-end con la formica. Ho bisogno di sapere come normalizzare i codici di uscita per tutte le mie attività personalizzate così come le attività incorporate nel grunt e limitare l'output della console a questi codici predefiniti quando i task grunt vengono chiamati dalla formica. Qualsiasi aiuto sarebbe molto apprezzato.grunt integratore con formica

risposta

2

Grunt può chiamare alla riga di comando, in modo da poter creare facilmente diverse attività in grunt che non fanno altro che eseguire un task ant sulla shell.

La biblioteca grunt-shell lo rende particolarmente facile da eseguire comandi esterni da un'attività grugnito: https://github.com/sindresorhus/grunt-shell

Dal momento che si sta parlando di codici di uscita personalizzato, anche se, probabilmente dovrete finire per scrivere il proprio grugnito personalizzato compito che esegue un comando di shell e poi guarda il codice di risposta (forse usando l'helper grunt.helpers.spawn): https://github.com/gruntjs/grunt/blob/master/docs/api_utils.md#gruntutilsspawn

Il mio consiglio? Il mio organization recently went through the same thing ed è meglio se possibile solo fare una pausa dalla formica e sbarazzartene interamente per i tuoi progetti relativi a JavaScript.

Grunt ha una libreria di plug-in così utile e in crescita sarei sorpreso se non fosse possibile duplicare i file di formica e creare una soluzione javascript al 100%.

+5

Sono anche in un negozio Java e questa è una vendita difficile. Anche se il front-end è sempre più importante per noi, è improbabile che passiamo a JS come linguaggio di costruzione per il codice lato server. Un approccio più realistico sembra essere quello di invocare il grunt tramite un task ant. D'altra parte non vedo nessuno che lo faccia così ... – carbontax

0

si potrebbe utilizzare http://abc.tools.qafoo.com/ che comprende un modulo NPM * 1)

L'unica cosa che è quindi necessario è un obiettivo personalizzato come:

… 

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

… 

dopo che si potrebbe correre grugnito nei alias directory .npm/node_modules/.bin/${npm.local.modulesdir}/.bin/ ^^ non perdere per includere o definire oggetti di src/main/resources/extensions/npm/npm.properties

* 1): unfortunatly buggy con l'attuale versione node.js

14

È possibile utilizzare questa 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> 

E si può chiamare qualsiasi comando: Esempio:

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

funziona come un fascino: garantisce anche la stderr è stampato anche, che è un comune problema quando si chiama grunt.