Reputation: 122392
I have a grunt task that calls other grunt tasks. I want to call a subtask with programmatically determined arguments. Is this possible? I spent some time digging around the lib/grunt.js and lib/grunt/task.js, but couldn't figure it out.
I'm using grunt-compass
with the following arguments specified in Gruntfile.js:
compass: {
default_options: {
src: 'components/201',
dest: 'build',
require: ['zurb-foundation']
}
}
I want to be able to override them at runtime:
tasks/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});
});
};
For reference:
$ grunt --version
grunt-cli v0.1.6
grunt v0.4.0rc6
Upvotes: 46
Views: 21585
Reputation: 22651
You can edit all the Grunt config:
grunt.config('compass.default_options.src', 'blabla');
Just before run the task. But your solution is "cleaner".
Upvotes: 3
Reputation: 122392
I figured it out. Use the <%= %>
syntax in Gruntfile.js:
compass: {
default_options: {
src: 'components/<%= myTask.src %>',
dest: 'build',
require: ['zurb-foundation']
}
}
Then you can set it in your task:
grunt.config.set('myTask.src', getSrc());
Upvotes: 59