我在我的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;事件处理程序中的文件操作),我尝试实现此操作失败,所以我很感激一些建议如何正确地做到这一点。
答案 0 :(得分:0)
答案 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'));
然后你将有一个空文件而不是已处理的文件。当然你可以修改它来将错误信息写入文件,或者做任意数量的事情。
有人说过,为什么在遇到这个错误时你根本不想让处理停止?任何未处理的流错误都应该停止处理。