如何通过编程方式向grunt任务传递参数?

46

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

我正在使用grunt-compass,在Gruntfile.js中指定以下参数:

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

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

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});
  });
};

供参考:

$ grunt --version
grunt-cli v0.1.6
grunt v0.4.0rc6
2个回答

59

我搞清楚了。在Gruntfile.js中使用<%= %>语法:

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

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

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

5
你从哪里获取myTask变量?它是全局的吗?它是在grunt.iniConfig中定义的吗? - Dan Rocha
2
@DanRocha 我猜测这是在grunt.initConfig中指定的一个变量,你可以使用Rosarch发布的最后一行代码在运行时进行设置。 - njtman

3

您可以编辑所有Grunt配置:

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

在运行任务之前,但您的解决方案更加简洁。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接