2013-05-15 22 views
15

Chcę utworzyć i uruchomić zadanie pomruczeń w kodzie node.js do użytku testowego.Uruchamianie zadania pomijam z api, bez linii poleceń

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*/]); 
} 

Ale to nie działa. Wydaje się, że Grunt nie wykonuje żadnego zadania. Jestem prawie pewien, że istnieje pewne API do uruchamiania zadania z zewnątrz bez linii poleceń, ale nie wiem jak to zrobić.

Czy jest jakikolwiek sposób to zrobić?

Odpowiedz

20

Możesz. Nie wiem, dlaczego ktoś musiałby to zrobić, ponieważ obecnie Grunt to narzędzie wiersza poleceń . OSTRZEŻENIE: Nie polecam używania Grunt w ten sposób. Ale tutaj jest:

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

Działa. Dziękuję Ci bardzo. Chciałem dynamicznie uruchomić program Grunt, aby skonfigurować pewne internetowe środowisko testowe. Aby to osiągnąć, potrzebowałem uruchomić Grunta w kodzie nodeJS lub użyć funkcji podobnej do exec(), aby utworzyć komendę CLI dla Grunta. Myślałem, że ten pierwszy był bardziej naturalny. – Kivol

+6

Zwykle używam 'grunt.util.spawn ({grunt: true, args: ['taskname']}, function() {})' do testowania w ten sposób. Spowoduje to, że Grunt będzie bliżej tego, w jaki sposób użytkownik uruchomi Grunta. –

+0

Dzięki! Spróbuję w ten sposób. – Kivol

13

można uzyskać inspirację, w jaki sposób uruchomić chrząknięcie z kodu patrząc na grunt-cli który to robi i który to projekt prowadzony przez grunt ludzi.

Grunt jest uruchamiany z kodu w grunt-cli/bin/grunt i można przeczytać więcej na temat opcji w grunt/lib/grunt/cli.js.

używam go w prywatnym projektem tak:

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

Przycisk „ekstra” będzie dostępna od wewnątrz gruntfile jak grunt.option("extra")

Oto bloggpost który opisuje alternatywną drogę do uruchomienia zadanie chrząstkowe: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli/

+0

To interesujący blog. Oto zaktualizowany link do niego: http://andrewduthie.com/2014/01/14/running-grunt-tasks-without-grunt-cli –

Powiązane problemy