运行 使用 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);
}
});
我进行了 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);
}
});