Gruntjs 使用grunt.task.Run(taskname)运行参数化任务

Gruntjs 使用grunt.task.Run(taskname)运行参数化任务,gruntjs,Gruntjs,我进行了stackoverflow搜索并查看了Grunt API文档,但找不到使用Grunt.task.run(taskname)运行参数化任务的方法 我有一个简单的任务,它接受一个参数并在控制台上打印消息: grunt.registerTask('hello', 'greeting task', function(name) { if(!name || !name.length) grunt.warn('you need to provide a name');

我进行了stackoverflow搜索并查看了Grunt 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 + '!');

});
我使用下面的任务调用上面的任务,该任务验证任务,如果任务存在,则运行它:

 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”任务:

这是我在命令行上尝试过的,但不起作用:

grunt validateandruntask:hello=foo


grunt validateandruntask:hello:param=name

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

grunt hello:you
要使用多个参数调用它,只需通过
将它们分开,如

grunt hello:mister:president
要在任务中使用这些多个参数,请执行与普通Javascript相同的操作:使用
参数
():

然后您要调用
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);
  }
});
grunt.registerTask('validateandruntask','if task available then run given task',function(taskname){
如果(!taskname | |!taskname.length){
grunt.fail.fatal('运行此任务需要任务名称');
}
var taskToCall=taskname;
for(var i=1;i
谢谢您的评论Xavier!我知道这是实现我想要的目标的一种方法,但我的问题更多的是如何使用grunt.task.run调用参数化任务?这是更多关于Grunt.task.run的Grunt API问题。我找不到任何关于这是否可能的文档?如果不是,那么我需要继续传递额外的参数,这会使应用程序代码变得复杂,因为要使用grunt.task.run()运行的任务可能接受n个参数。将任意数量的参数传递给grunt.task.run()的方法是将它们添加到由“:”分隔的任务名称中。在函数中使用任意数量的参数的方法是通过
参数
()。我将用示例更新答案。这并不能直接解决我在原始代码中使用多个参数运行任务的问题,我希望我的validateandrun任务能够使用多个参数运行任务,而无需真正解析arguments对象。我希望grunt.task.run()API隐式地支持这一点,即使用多个参数运行任务,但我猜它们不支持。我对他们的github回购有一个问题/疑问。但不管怎样,你的回答确实提供了一种方法,以另一种方式实现我所寻找的目标。所以我会接受你的回答。谢谢
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);
  }
});