捕获Gulp中所有未处理的错误

时间:2016-01-26 00:19:35

标签: node.js error-handling gulp pipe

对于像这样的新开发者来说,我们的Gulp构建过程失败了:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: EMFILE, open '[some filename]'
    at Error (native)

解决方案是运行:

ulimit -n 2048

所以我想抓住EMFILE错误并将其替换为更友好的消息。但是,即使将整个gulpfile.js包裹在try/catch中,也似乎不包含它。

1 个答案:

答案 0 :(得分:1)

事实证明,围绕一切包裹try/catch并不起作用,因为错误发生在(全部)代码执行之后。在每个管道中注入一个错误处理程序:

function onError(e) {
    if (e.code === 'EMFILE') {
        console.error('Too many open files. You should run this command:\n    ulimit -n 2048');
        process.exit(1);
    }
    gutil.log(e.message);
    process.exit(1);
}

...
var result = bundler.bundle();

result = result
    .on('error', onError)
    .pipe(source(name))
    .pipe(buffer());