Остановить выполнение gulp pipe при сбое jshint
Я использую gulp для запуска веб-сервера разработчика и хочу, чтобы при изменении файла javascript происходили следующие задачи:
- Lint Javascript
- если ошибок нет, скопируйте файлы в.tmp/
- перезагрузить веб-страницу
Я видел в других примерах использование jshint.reporter('fail'), как показано в коде ниже, чтобы остановить остальную часть конвейера.
var jshint = require('gulp-jshint'),
watch = require('gulp-watch');
watch('resources/js/src/**/*.js', function() {
util.log('Changes to js source files detected');
}).pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(jshint.reporter('fail'))
.pipe(gulp.dest('.tmp/js/src/'))
.pipe(connect.reload());
Однако, когда я делаю это, это, кажется, всегда останавливается, независимо от того, был ли успех ворсом. Итак, как я могу завершить конвейер после неудачного линтинга?
2 ответа
Что вы можете сделать, это плагин plumber
выйти в случае ошибки
поэтому труба сантехник в процессе помола
.pipe(plumber(_doExit))
вот как вы определили _doExit
function _doExit() {
process.exit(1);
}
Не уверен, что это лучшее решение, но оно работает:
var map = require('map-stream');
...
var copyAndReload = map(function (file, cb) {
if (file.jshint.success) {
gulp.src('resources/js/src/**/*.js')
.pipe(gulp.dest('.tmp/js/src/'))
.pipe(connect.reload());
}
});
watch('resources/js/src/**/*.js', function() {
util.log('Changes to js source files detected');
}).pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(copyAndReload);