运行 使用 grunt.task.run(taskname) 的参数化任务

Run parametrized task using grunt.task.run(taskname)

我进行了 Whosebug 搜索并查看了 G运行t API 文档,但找不到使用 grunt.task.run(taskname) 运行 参数化任务的方法.

我有一个简单的任务,它接受一个参数并在控制台上打印消息:

grunt.registerTask('hello', 'greeting task', function(name) {
   if(!name || !name.length)
        grunt.warn('you need to provide a name');

    console.log('hello ' + name + '!');

});

我使用下面的任务调用上面的任务来验证任务,如果任务存在,那么它 运行s 它:

 grunt.registerTask('validateandruntask', 'if task available then run given  task', function(taskname) {
       if(!taskname || !taskname.length) {
           grunt.warn('task name is needed to run this task');
       }

    if(!grunt.task.exists(taskname)) {
        grunt.log.writeln('this task does not exist!');
    } else {
        grunt.log.writeln(taskname + ' exists. Going to run this task');
        grunt.task.run(taskname);
    }

});

现在,我从命令行将 'hello' 任务作为参数传递给 'validateandruntask',但我无法将参数从命令行传递给 'hello' 任务:

这是我在命令行上尝试过但没有用的方法:

g运行t validateandruntask:hello=foo

g运行t validateandruntask:hello:参数=名称

首先,通过命令行传递参数的方法是使用:。 例如直接调用hello

grunt hello:you

要用多个参数调用它,只需用 : 将它们分开,例如

grunt hello:mister:president

要在任务中使用这些多个参数,您的操作与普通 Javascript 相同:使用 arguments (all details here):

grunt.registerTask('hello', 'greeting task', function(name) {
  if(!name || !name.length)
    grunt.warn('you need to provide a name');
  // unfortunately arguments is not an array,
  // we need to convert it to use array methods like join()
  var args = Array.prototype.slice.call(arguments);
  var greet = 'hello ' + args.join(' ') + '!';
  console.log(greet);
});

然后你想调用 grunt validateandruntask:hello:mister:president,并修改你的代码以处理可变参数:

grunt.registerTask('validateandruntask', 'if task available then run given  task', function(taskname) {
   if(!taskname || !taskname.length) {
       grunt.fail.fatal('task name is needed to run this task');
   }

  var taskToCall = taskname;
  for(var i = 1; i < arguments.length; i++) {
    taskToCall += ':' + arguments[i];
  }
  console.log(taskToCall);

  if(!grunt.task.exists(taskname)) {
      grunt.log.writeln('this task does not exist!');
  } else {
      grunt.log.writeln(taskname + ' exists. Going to run this task');
      grunt.task.run(taskToCall);
  }
});