gulp:如果Browserify失败则消隐输出

时间:2014-07-28 06:08:38

标签: gulp browserify

我在我的gulpfile.js中使用Browserify就像这样:

browserify("src/main.js").bundle()
    .on("end", function() {
        console.log("compiled JavaScript via Browserify");
    })
    .on("error", function(err) {
        console.warn("ERROR: Browserify failed", err);
    })
    .pipe(source("bundle.js"))
    .pipe(gulp.dest("./dist"));

但是,很容易错过编译错误 - 所以我更喜欢将dist/bundle.js空白(或插入alert("ERROR");),而不是仅仅在终端中报告错误。< / p>

由于我所假设的竞争条件(管道结论覆盖&#34;错误&#34;事件处理程序中的文件操作),我尝试实现此操作失败,所以我很感激一些建议如何正确地做到这一点。

2 个答案:

答案 0 :(得分:0)

如果您认为问题是由于代码的异步性造成的,您可以使用asyncq来指定代码执行的顺序(例如async.waterfall} )。

答案 1 :(得分:0)

如果要在出错时清空文件,可以编写一个gulp流处理程序来处理在流中生成的控制结构并将文件清空,否则只需将其传递出去。这是处理程序的代码:

var through2 = require('through2');
var gutil = require('gulp-util');

var blank = function () {
    var blank = false;
    return through2.obj(
        function (file, encoding, cb) {
            if (!file.control && !blank) {
                this.push(file);
            } else if (file.control) {
                blank = true;
            } else if (file.path && blank) {
                var newFile = new gutil.File({
                  base: file.base,
                  cwd: file.cwd,
                  path: file.path,
                  contents: new Buffer('')
                });
                this.push(newFile);
            }
            cb();
        }, function (cb) {
            cb();
        });
};

然后你需要捕获错误并生成一个控制结构。这可以这样做,在on("error"处理程序中,您放置以下代码行:

this.push({"control": "failed"});

如果在输出之前将空白处理程序设置为流中的最后一个处理程序,如下所示:

    .pipe(blank())
    .pipe(gulp.dest('./dist'));

然后你将有一个空文件而不是已处理的文件。当然你可以修改它来将错误信息写入文件,或者做任意数量的事情。

有人说过,为什么在遇到这个错误时你根本不想让处理停止?任何未处理的流错误都应该停止处理。