【问题标题】:Catching and handling Uglify errors when using Gulp使用 Gulp 时捕获和处理 Uglify 错误
【发布时间】:2015-11-16 12:57:26
【问题描述】:

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

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

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

【问题讨论】:

  • 为什么你有一个来自最糟糕的星际迷航剧集之一的头像?!

标签: npm gulp uglifyjs gulp-uglify


【解决方案1】:

看来解决方法很简单:

    .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)。

【讨论】:

  • @Chunck 它可以工作,但错误的参考是 /dist 文件夹中的 filename: 'script.js'。如何找出 concat'ing 之前的哪个 js 文件是错误的原因?提前致谢。
【解决方案2】:

也许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))
});

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多