2013-02-08 1 views
43

Ho un task grunt che chiama altri task grunt. Voglio chiamare una sottoattività con argomenti determinati a livello di codice. È possibile? Ho trascorso un po 'di tempo a scavare attorno al lib/grunt.js e lib/grunt/task.js, ma non sono riuscito a capirlo.Passa automaticamente gli argomenti all'attività grunt?

sto usando grunt-compass con i seguenti argomenti specificati in Gruntfile.js:

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

Voglio essere in grado di eseguire l'override di loro in fase di esecuzione:

compiti/my-task. js:

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

Per riferimento:

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

risposta

58

L'ho capito. Utilizzare la sintassi <%= %> in Gruntfile.js:

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

quindi è possibile impostare nel vostro compito:

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

Dove prendi myTask var? è globale? è definito su grunt .iniConfig? –

+2

@DanRocha Direi che è una variabile specificata nel grunt.initConfig che hai impostato durante il runtime utilizzando l'ultima riga di codice pubblicata da Rosarch. – njtman

2

È possibile modificare tutte le config Grunt:

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

Poco prima corsa l'obiettivo. Ma la tua soluzione è "più pulita".