如何在命令行上获取grunt任务名称?

时间:2013-06-11 10:48:01

标签: gruntjs

为了自定义我的grunt任务,我需要在启动grunt时访问命令行上给出的grunt任务名称。

这些选项没有问题,因为它有很好的文档记录(grunt.options)。 还有很好的文档说明如何在运行grunt任务时找到任务名称​​

但我之前需要访问任务名称。

例如,用户写道 grunt build --target=client

Gruntfile.js中配置grunt作业时,我可以使用 grunt.option('target')获取'client'

但是如何在任务构建开始之前获取参数build

非常感谢任何指导!

3 个答案:

答案 0 :(得分:26)

你的grunt文件基本上只是一个功能。尝试将此行添加到顶部:

module.exports = function( grunt ) {
/*==> */    console.log(grunt.option('target'));
/*==> */    console.log(grunt.cli.tasks);

// Add your pre task code here...

使用grunt build --target=client运行应该为您提供输出:

client
[ 'build' ]

此时,您可以在运行任务之前运行所需的任何代码,包括使用新依赖项设置值。

答案 1 :(得分:3)

更好的方法是使用grunt.task.current,其中包含有关当前正在运行的任务的信息,包括name属性。在任务中,上下文(即this)是同一个对象。所以。 。 。

grunt.registerTask('foo', 'Foobar all the things', function() {
  console.log(grunt.task.current.name); // foo
  console.log(this.name); // foo
  console.log(this === grunt.task.current); // true
});

如果build是其他任务的别名,并且您只想知道导致当前任务执行的键入的命令,我通常使用process.argv[2]。如果您检查process.argv,您会发现argv[0]node(因为gruntnode进程),argv[1]是{{ 1}},grunt是实际的grunt任务(后跟argv[2]其余部分中的任何参数)。

编辑:

来自任务的grunt@0.4.5 argv的示例输出(不能从当前任务获得当前任务)。

console.log(grunt.task.current)

答案 2 :(得分:1)

您可以使用grunt.util.hooker.hook

示例(Gruntfile.coffee的一部分):

grunt.util.hooker.hook grunt.task, (opt) ->
  if grunt.task.current and grunt.task.current.nameArgs
    console.log "Task to run: " + grunt.task.current.nameArgs

<强> CMD

C:\some_dir>grunt concat --cmp my_cmp
Task to run: concat
Running "concat:coffee" (concat) task
Task to run: concat:coffee
File "core.coffee" created.

Done, without errors.

还有一个我用来阻止某些任务执行的黑客攻击:

grunt.util.hooker.hook grunt.task, (opt) ->
  if grunt.task.current and grunt.task.current.nameArgs
    console.log "Task to run: " + grunt.task.current.nameArgs
    if grunt.task.current.nameArgs is "<some task you don't want user to run>"
      console.log "Ooooh, not <doing smth> today :("
      exit()  # Not valid. Don't know how to exit :), but will stop grunt anyway

允许使用CMD

C:\some_dir>grunt concat:coffee --cmp my_cmp
Running "concat:coffee" (concat) task
Task to run: concat:coffee
File "core.coffee" created.

Done, without errors.

CMD,当被阻止时

C:\some_dir>grunt concat:coffee --cmp my_cmp
Running "concat:coffee" (concat) task
Task to run: concat:coffee
Ooooh, not concating today :(
Warning: exit is not defined Use --force to continue.

Aborted due to warnings.