46

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

我正在使用Gruntfile.jsgrunt-compass中指定的以下参数:

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

我希望能够在运行时覆盖它们:

任务/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});
  });
};

以供参考:

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

2 回答 2

59

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

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

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

grunt.config.set('myTask.src', getSrc());
于 2013-02-08T20:33:03.243 回答
3

您可以编辑所有 Grunt 配置:

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

就在运行任务之前。但是您的解决方案是“更清洁的”。

于 2014-10-22T13:01:47.590 回答