Остановить выполнение 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);
Другие вопросы по тегам