2013-05-23 1 views
23

Ho un file Grunt nella radice del mio progetto. Ho anche installato jQuery tramite Bower in una directory app/components/jquery.Esecuzione di un'attività grunt su un Gruntfile da un altro

Come parte del mio Gruntfile Vorrei eseguire alcuni comandi su jQuery Gruntfile per creare una versione personalizzata della libreria.

Come posso ottenere dal loro Gruntfile?

risposta

29

è possibile creare un compito semplice che spawns grunt nella cartella che si desidera:

grunt.registerTask('run-grunt', function() { 
    var done = this.async(); 
    grunt.util.spawn({ 
     grunt: true, 
     args: [''], 
     opts: { 
      cwd: 'app/components/jquery' 
     } 
    }, function (err, result, code) { 
     done(); 
    }); 
}); 
+2

Questo quasi funziona .... Ciò che sarebbe necessario per questo per mostrare l'output dall'attività. Diciamo che ho un karma compito: unità che esegue i miei test unitari con 'watch: true'. Mi piacerebbe essere in grado di eseguirlo e vedere l'output sullo schermo. –

0

non so se funziona, ma si potrebbe fare un tentativo. il tuo jQuery Gruntfile viene esportato tramite "module.exports". ciò dovrebbe significare che puoi richiederlo nel tuo codice e usarlo.

var jQueryGrunt = require('path-to-jquery-gruntfile'); 
jQueryGrunt.task.run(['your-task-you-want-to-run']); 

sarà interessante sentire se funziona ...

16

Se si desidera ottenere l'output su console , basandosi sulla risposta di @ Sindre, tutto ciò che devi fare è registrare la console sul risultato.stdout.

grunt.registerTask('run-grunt', function() { 
    var cb = this.async(); 
    grunt.util.spawn({ 
     grunt: true, 
     args: ['clean', 'copy:fonts'], 
     opts: { 
      cwd: 'bower_components/bootstrap' 
     } 
    }, function(error, result, code) { 
     console.log(result.stdout); 
     cb(); 
    }); 
}); 
+1

Funziona perfettamente, anche se ovviamente l'output è bufferizzato. – LeeGee

11

Sulla base @ Sindre di e @ risposta di Stefano, possiamo anche ottenere l'output della console "in tempo reale", senza essere tamponata:

grunt.registerTask('run-grunt', function() { 
    var cb = this.async(); 
    var child = grunt.util.spawn({ 
     grunt: true, 
     args: ['clean', 'copy:fonts'], 
     opts: { 
      cwd: 'bower_components/bootstrap' 
     } 
    }, function(error, result, code) { 
     cb(); 
    }); 

    child.stdout.pipe(process.stdout); 
    child.stderr.pipe(process.stderr); 
}); 
+0

Funziona bene, anche in Visual Studio Task Runner Explorer. Ora posso eseguire attività dal gruntfile di Bootstrap tramite un gruntfile nella root del progetto (che è necessario per Task Runner Explorer) – ArieKanarie