全局grunt任务错误处理

时间:2015-06-02 16:01:32

标签: gruntjs

Grunt将输出退出代码,这对于执行grunt任务的脚本来说非常棒,但我希望能够在grunt完成后处理失败的grunt任务。

我期待找到某种类型的错误处理函数,我可以在initConfig中设置某个地方,但我什么都看不到。同样,即使是最终"功能很好用。

基本上,我有一个别名任务,它是我执行的一组任务,其中一个临时更改文件的内容,并在完成所有内容后将内容写回磁盘。即使发生突变后的任务失败,我仍希望能够至少尝试将内容写回磁盘。

这种影响会很棒。

grunt.initConfig({
    onError: function (error) {
        // execute my file cleanup
    },

    // this is essentially a "finally" function that executes once grunt 
    // finishes with all tasks.
    onComplete: function () {
        // execute my file cleanup
    }
});

1 个答案:

答案 0 :(得分:1)

我很确定,没有这样的功能。但这是一个受欢迎的请求:12

现在可以做些什么?您可以编写自定义的grunt-task,如下所示:

var errorCb = function() { callback(); }
var doneCb = function() { callback(); }
grunt.initConfig({
    task_runner: {
        before: ...,
        beforeEach: ...,
        run: ['other_task1', 'other_task2'],
        after: ...,
        afterEach: ...,
        onError: errorCb,
        onComplete: doneCb
    },
    other_tasks: { ... }
});

注册你的任务:

grunt.registerTask('task_runner', "Tasks' lifecycle", function(task, message) {
    // foreach task in tasks: grunt.task.run(task)
    ...
    // except(`grunt.util.error`)
});

据我所知,没有任何美妙的方法可以让任务结果运行。所以这里是monkey-patching。可以挂钩这些功能:grunt.failgrunt.log.error

以下是一些inspiration12。另外,请查看grunt-then

总而言之,我不能说这是一件容易的事。我希望有一天Grunt会有事件(现在:“请注意,Grunt还没有发出任何事件,但在你自己的任务中仍然有用。”)。

P.S。你有没有考虑过Gulp的项目?

P.S.S如果您要编写自定义任务,请随时向我索要。