2

我的 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 文档gulp-uglify如果无法缩小特定文件,则会发出“错误”事件。只要有可能,该PluginError对象将包含以下属性:fileNamelineNumbermessage

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

编辑:我意识到有许多 Gulp 扩展在处理错误处理时会有所帮助(例如Gulp-UtilStream-Combiner2Gulp-Plumber等),但我不希望安装一个全新的扩展Uglify(没有一个我处理我的 Sass 错误就好了)。

4

2 回答 2

11

似乎解决方案非常简单:

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

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

于 2015-11-16T17:47:53.107 回答
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))
});

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

于 2015-11-16T13:34:53.497 回答