2013-02-08 200 views
43

我有一个咕噜任务调用其他咕噜任务。我想用编程确定的参数调用子任务。这可能吗?我花了一些时间挖掘lib/grunt.jslib/grunt/task.js,但无法弄清楚。以编程方式将参数传递给grunt任务?

我使用grunt-compassGruntfile.js指定以下参数:

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

我希望能够在运行时对其进行覆盖:

任务/我的任务。 JS

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

参考:

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

回答

58

我想通了。使用<%= %>语法Gruntfile.js:

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

然后你可以设置它在任务:

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

你从哪里得到myTask var?它是全球性的吗?它是在grunt .iniConfig上定义的吗? – 2014-04-09 17:27:41

+2

@DanRocha我猜想它是一个在grunt.initConfig中指定的变量,它是在运行时使用Rosarch发布的最后一行代码设置的。 – njtman 2014-04-11 19:25:37

2

您可以编辑所有的咕噜配置:

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

只运行前任务。但是你的解决方案是“更清洁”的。

相关问题