GruntJS中的Try-Catch任务

时间:2015-01-18 11:18:32

标签: javascript gruntjs

当GruntJS任务失败并采取行动时,是否有办法捕获它?

--force标志没有帮助,因为我需要知道是否有什么事情发生了,并对此采取了一些措施。

我尝试了一些类似于try-catch的安排,但它不起作用。这是因为grunt.registerTask将任务推入队列 - 执行不是同步的。

  grunt.registerTask('foo', "My foo task.", function() {
    try {
      grunt.task.run('bar');
    } catch (ex) {
      // Handle the failure without breaking the task queue
    }
  });

欢迎创意javascript创意以及GruntJS专有技术。

2 个答案:

答案 0 :(得分:1)

这只丑陋的野兽应该适合你:

  grunt.registerMultiTask('foo-task', 'my foo task', function() {
    try {
      console.log(this.data);
      throw new Error('something bad happened!');
    } catch (e) {
      console.log('Ooops:', e);
    }

    return true;
  });

  grunt.registerTask('foo', 'Runs foo.', function() {
    grunt.config('foo-task', {
      hello: 'world'
    });
    grunt.task.run('foo-task');
  });

通过以下方式运行:grunt foo

输出:

Running "foo" task

Running "foo-task:hello" (foo-task) task
world
Ooops: Error: something bad happened!
    at Object.<anonymous> 

    <stacktrace here>    

Done, without errors.

答案 1 :(得分:0)

我没有对它进行过测试,但是在任何Javascript代码中都可以在需要时添加事件监听器到grunt对象和从任务中激活事件 ...

不知道这是否完全适合您的问题,但我会尝试一下。

希望它有所帮助!