我的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
对象将包含以下属性:fileName
,lineNumber
,message
。
我最接近工作的是:.on('error', function(uglify) { console.error(uglify.message) }))
,但最终上述Gulp任务不再需要了。
编辑:我意识到有许多Gulp扩展可以帮助处理错误处理(例如Gulp-Util,Stream-Combiner2,Gulp-Plumber等等。)但我不知道希望为Uglify安装一个全新的扩展(我正在处理我的Sass错误,没有一个)。
答案 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))
});
这应该捕获发出的任何错误并将它们写入控制台。