2013-02-08 5 views
43

Ich habe eine Grunt-Aufgabe, die andere Grunt-Aufgaben aufruft. Ich möchte eine Teilaufgabe mit programmatisch bestimmten Argumenten aufrufen. Ist das möglich? Ich verbrachte einige Zeit um die lib/grunt.js und lib/grunt/task.js zu graben, konnte es aber nicht herausfinden.Programmatisch Argumente übergeben, um die Aufgabe zu grunzen?

ich grunt-compass mit den folgenden Argumenten angegeben bin mit in Gruntfile.js:

compass: { 
    default_options: { 
    src: 'components/201', 
    dest: 'build', 
    require: ['zurb-foundation'] 
    } 
} 

Ich möchte in der Lage sein, sie zur Laufzeit außer Kraft zu setzen:

Aufgaben/my-Aufgabe. js:

// simplified example 
module.exports = function(grunt) { 
    grunt.registerTask('foo', 'bar', function() { 
    var chooseDest = doWork(); 
    grunt.task.run('compass', {src: 'src', dest: chooseDest}); 
    }); 
}; 

Zum Vergleich:

$ grunt --version 
grunt-cli v0.1.6 
grunt v0.4.0rc6 

Antwort

58

Ich fand es heraus. Verwenden Sie die <%= %> Syntax in Gruntfile.js:

compass: { 
    default_options: { 
    src: 'components/<%= myTask.src %>', 
    dest: 'build', 
    require: ['zurb-foundation'] 
    } 
} 

Dann Sie es in Ihre Aufgabe festlegen:

grunt.config.set('myTask.src', getSrc()); 
+3

Woher bekommst du myTask var? ist es global? Ist es auf grunt .iniConfig definiert? –

+2

@DanRocha Ich denke, es ist eine Variable in der Grunt.initConfig angegeben, die Sie während der Laufzeit mit der letzten Zeile von Code, die Rosarch gebucht hat. – njtman

2

Sie bearbeiten können, die alle Grunt config:

grunt.config('compass.default_options.src', 'blabla'); 

Kurz vor Lauf die Aufgabe. Aber deine Lösung ist "sauberer".

Verwandte Themen