2013-05-15 24 views
15

Desidero creare ed eseguire attività grunt nel codice node.js per l'utilizzo di test.Esecuzione di attività grunt con api, senza riga di comando

var foo = function() { 
    var grunt = require("grunt"); 

    var options = {"blahblah": null} // ...creating dynamic grunt options, such as concat and jshint 
    grunt.initConfig(options); 
    grunt.registerTask('default', [/*grunt subtasks*/]); 
} 

Ma questo non funziona. Grunt non sembra eseguire alcun compito. Sono quasi sicuro che ci sia qualche API per eseguire esternamente il comando grunt senza riga di comando, ma non so come farlo.

C'è un modo per farlo?

risposta

20

È possibile. Non so perché qualcuno dovrebbe averne bisogno visto che attualmente Grunt è uno strumento da riga di comando . ATTENZIONE: non è consigliabile eseguire Grunt in questo modo. Ma qui è:

var grunt = require('grunt'); 

// hack to avoid loading a Gruntfile 
// You can skip this and just use a Gruntfile instead 
grunt.task.init = function() {}; 

// Init config 
grunt.initConfig({ 
    jshint: { 
    all: ['index.js'] 
    } 
}); 

// Register your own tasks 
grunt.registerTask('mytask', function() { 
    grunt.log.write('Ran my task.'); 
}); 

// Load tasks from npm 
grunt.loadNpmTasks('grunt-contrib-jshint'); 

// Finally run the tasks, with options and a callback when we're done 
grunt.tasks(['mytask', 'jshint'], {}, function() { 
    grunt.log.ok('Done running tasks.'); 
}); 
+1

Funziona. Grazie mille. Volevo eseguire Grunt in modo dinamico per creare un ambiente di test basato sul web. Per realizzarlo, avevo bisogno di eseguire Grunt nel codice nodeJS, o usando la cosa simile a exec() per creare il comando CLI di Grunt. Pensavo che il primo fosse più naturale. – Kivol

+6

Di solito uso 'grunt.util.spawn ({grunt: true, args: ['taskname']}, function() {})' per testare in questo modo. Genera più da vicino Grunt su come un utente avrebbe eseguito Grunt. –

+0

Grazie! Proverò in questo modo. – Kivol

13

È possibile ottenere ispirazione su come eseguire grugnito dal codice, cercando in grunt-cli che fa questo e che è un progetto gestito dalla gente grugnito.

Grunt viene lanciato dal codice in grunt-cli/bin/grunt e si può leggere di più sulle opzioni in grunt/lib/grunt/cli.js.

lo uso in un progetto privato come questo:

var grunt = require("grunt"); 
grunt.cli({ 
    gruntfile: __dirname + "/path/to/someGruntfile.js", 
    extra: {key: "value"} 
}); 

Il tasto "extra" sarà disponibile da dentro l'gruntfile come grunt.option("extra")

Ecco un bloggpost che descrive un modo alternativo per eseguire un compito da grugnito: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli/

+0

È un blogpost interessante. Ecco il link aggiornato ad esso: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli –

Problemi correlati