使用Gulp时捕获和处理Uglify错误

Chu*_*utt 2 npm uglifyjs gulp gulp-uglify

我的Gulp设置在其他方面非常有效,但如果我的JS文件出错,它会停止.直到Gulp 4终于发布之前,我们都被困在Gulp中使用不完美的错误系统......那么我怎么能抓住Uglify的错误呢?

gulp.task('js', function() {
    return gulp
        .src(inputJS)
        .pipe(sourcemaps.init())
        .pipe(concat('main.js'))
        .pipe(uglify(uglifyOptions))
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest(outputJS))
});
Run Code Online (Sandbox Code Playgroud)

根据Uglify文档,gulp-uglify如果无法缩小特定文件,则会发出"错误"事件.只要有可能,PluginError对象将包含以下属性:fileName,lineNumber,message.

我最接近它的工作是:.on('error', function(uglify) { console.error(uglify.message) })),但它结束了上面的Gulp任务不再做了.

编辑:我意识到有许多Gulp扩展有助于处理错误处理(例如Gulp-Util,Stream-Combiner2,Gulp-Plumber等)但我不希望安装一个全新的扩展仅用于Uglify(我正在处理我的Sass错误,没有一个).

Chu*_*utt 10

似乎解决方案非常简单:

    .pipe(uglify(uglifyOptions).on('error', function(uglify) {
        console.error(uglify.message);
        this.emit('end');
    }))
Run Code Online (Sandbox Code Playgroud)

几乎就是杰夫瓦建议的,但没有必要gulp-plumber.我的尝试停止的原因是因为Gulp watch任务等到他们收到end(参见:https://github.com/gulpjs/gulp/issues/259).