2015-01-18 15 views
6

Có cách nào để nắm bắt khi một nhiệm vụ GruntJS thất bại và hành động theo nó?Nhiệm vụ Try-Catch trong GruntJS

Cờ --force không giúp được gì, bởi vì tôi cần phải biết nếu có điều gì đó bị hỏng trên đường đi và làm điều gì đó về nó.

Tôi đã thử một số sắp xếp tương tự như thử nghiệm, tuy nhiên nó không hoạt động. Đó là vì grunt.registerTask đẩy các tác vụ vào hàng đợi - việc thực thi không đồng bộ.

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

Ý tưởng về javascript sáng tạo được hoan nghênh cũng như bí quyết của GruntJS.

+1

Dường như [sự kiện API] (http: // gruntjs .com/api/grunt.event) là những gì cuối cùng sẽ cho phép bạn làm điều này, nhưng đó không phải là dự kiến ​​sẽ được hoàn thành cho đến v0.5 [theo vấn đề tồn đọng] (https://github.com/gruntjs/ grunt/issues/1167). – jakerella

+0

@jakerella Rất tiếc, bạn đã đúng. – pilau

Trả lời

0

tôi đã không kiểm tra nó nhưng cũng giống như trong bất kỳ mã Javascript bạn có thể thêm xử lý sự kiện để grunt đối tượng và sự kiện cháy từ nhiệm vụ khi bạn cần nó ...

Không biết nếu điều này có thể chính xác phù hợp với câu hỏi của bạn nhưng tôi sẽ cho nó một thử.

Hy vọng điều đó sẽ hữu ích!

+0

Vậy ... chính xác thì tôi làm điều đó ở đâu? Mã của Grunt không phải của tôi – pilau

+0

Chỉ cần thử một cái gì đó như sử dụng 'require (" events ");' và sau đó viết một số mã như thế này 'grunt.on (" taskFailed ", function (message) { console.error (" Lỗi tìm thấy "+ tin nhắn) }); ' và trong bất kỳ nhiệm vụ nào sử dụng' grunt.emit ("taskFailed", tin nhắn); ' Nó chỉ là một ý tưởng để bạn nhận được bất kỳ bình luận kết quả nào! haha – Xavis

+0

Nhưng các tác vụ cũng là libs của bên thứ 3 ... – pilau

1

con thú xấu xí này nên làm việc cho bạn:

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'); 
    }); 

Run nó thông qua: grunt foo

Output:

Running "foo" task 

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

    <stacktrace here>  

Done, without errors. 
Các vấn đề liên quan