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

时间:2015-11-16 12:57:27

标签: npm gulp uglifyjs 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))
});

根据Uglify documentationgulp-uglify如果无法缩小特定文件,则会发出'错误'事件。只要有可能,PluginError对象将包含以下属性:fileNamelineNumbermessage

我最接近工作的是:.on('error', function(uglify) { console.error(uglify.message) })),但最终上述Gulp任务不再需要了。

编辑:我意识到有许多Gulp扩展可以帮助处理错误处理(例如Gulp-UtilStream-Combiner2Gulp-Plumber等等。)但我不知道希望为Uglify安装一个全新的扩展(我正在处理我的Sass错误,没有一个)。

2 个答案:

答案 0 :(得分:9)

似乎解决方案非常简单:

    .pipe(uglify(uglifyOptions).on('error', function(uglify) {
        console.error(uglify.message);
        this.emit('end');
    }))

几乎完全是Jeffwa所建议的,但不需要gulp-plumber。我的尝试停止的原因是因为Gulp watch任务等到他们收到end后(见https://github.com/gulpjs/gulp/issues/259)。

答案 1 :(得分:1)

也许gulp-plumber会有所帮助。

var plumber = require('gulp-plumber');

gulp.task('js', function() {
    return gulp
        .src(inputJS)
        .pipe(plumber(function(error) {
            console.error(error.message);
            gulp.emit('finish');
        }))
        .pipe(sourcemaps.init())
        .pipe(concat('main.js'))
        .pipe(uglify(uglifyOptions))
        .pipe(sourcemaps.write('./maps'))
        .pipe(gulp.dest(outputJS))
});

这应该捕获发出的任何错误并将它们写入控制台。