使用 Gulp 时捕获和处理 Uglify 错误
Catching and handling Uglify errors when using Gulp
我的 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
无法缩小特定文件,则会发出 'error' 事件。只要有可能,PluginError
对象将包含以下属性:fileName
、lineNumber
、message
.
我最接近它工作的是:.on('error', function(uglify) { console.error(uglify.message) }))
,但它最终停止执行上述 Gulp 任务。
编辑:我知道有许多 Gulp 扩展可以帮助处理错误(例如 Gulp-Util, Stream-Combiner2, Gulp-Plumber 等),但我不想安装全新的仅用于 Uglify 的扩展(我正在处理我的 Sass 错误,没有一个错误)。
也许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))
});
那应该捕获任何发出的错误并将它们写入控制台。
看起来解决方案很简单:
.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)。
我的 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
无法缩小特定文件,则会发出 'error' 事件。只要有可能,PluginError
对象将包含以下属性:fileName
、lineNumber
、message
.
我最接近它工作的是:.on('error', function(uglify) { console.error(uglify.message) }))
,但它最终停止执行上述 Gulp 任务。
编辑:我知道有许多 Gulp 扩展可以帮助处理错误(例如 Gulp-Util, Stream-Combiner2, Gulp-Plumber 等),但我不想安装全新的仅用于 Uglify 的扩展(我正在处理我的 Sass 错误,没有一个错误)。
也许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))
});
那应该捕获任何发出的错误并将它们写入控制台。
看起来解决方案很简单:
.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)。