【问题标题】:Programmatically pass arguments to grunt task?以编程方式将参数传递给 grunt 任务?
【发布时间】:2013-02-08 20:15:44
【问题描述】:

我有一个调用其他 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

【问题讨论】:

    标签: javascript node.js gruntjs


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你从哪里得到 myTask 变量?是全球性的吗?它是在 grunt .iniConfig 上定义的吗?
    • @DanRocha 我猜这是您在运行时使用 Rosarch 发布的最后一行代码设置的 grunt.initConfig 中指定的变量。
    【解决方案2】:

    您可以编辑所有 Grunt 配置:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 2015-10-24
      相关资源
      最近更新 更多