最简单的解决方法是使用 gulp-plumber 更优雅地处理错误:
var plumber = require("gulp-plumber");
gulp.task('scripts', () => {
return gulp.src('assets/js/src/*.js')
.pipe(plumber())
.pipe(jshint())
.pipe(jshint.reporter('jshint-stylish', {beep: true}))
.pipe(concat('main.js'))
.pipe(gulp.dest('assets/js/build/'))
.pipe(uglify())
.pipe(gulp.dest('assets/js/'))
.pipe(browserSync.stream({stream: true}));
});
就个人而言,我不喜欢该解决方案,因为它会阻止您的缩小文件被更新。以下是我的建议:
var jshintSuccess = function (file) {
return file.jshint.success;
}
gulp.task('scripts', () => {
return gulp.src('assets/js/src/*.js')
.pipe(sourcemaps.init())
.pipe(jshint())
.pipe(jshint.reporter('jshint-stylish', {
beep: true
}))
.pipe(gulpif(jshintSuccess, uglify()))
.pipe(concat('main.js'))
.pipe(sourcemaps.write('maps'))
.pipe(gulp.dest('assets/js/'))
.pipe(browserSync.stream({
stream: true
}));
});
首先,请注意我没有写信给多个目的地。相反,我使用源映射,这样您就不需要未缩小的代码。其次,我正在使用 gulp-if 根据 jshint 的结果有条件地通过 uglify 管道您的代码。有错误的代码将绕过 uglify,以便它仍然进入您的目标文件。
现在,您可以使用开发人员工具对其进行检查和调试。
注意:我建议仅将其用于本地开发。我不会将此连接到持续集成管道,因为您只需要好的代码将其投入生产。要么为此设置一个不同的任务,要么添加另一个 gulp-if 条件,以防止基于环境变量构建损坏的代码。