Задание без глотка завершается с недопустимым стилем

Во-первых, репозиторий с очень простым примером моей проблемы: https://github.com/nkoder/example-of-gulp-less-zero-exit-on-error

Я хочу определить конвейер сборки gulp, который не работает при любой ошибке. Этот конвейер будет использоваться в автоматизированном процессе (например, Continuous Integration), поэтому мне нужна команда build для возврата ненулевого кода завершения при ошибке. Это работает для меня с недопустимыми шаблонами Jade или непроходными тестами, запускаемыми с Karma.

Проблема в том, когда я использую gulp-less подготовить CSS из LESS. Всякий раз, когда я добавляю любой шаг конвейера после gulp-less При выполнении все ошибки "расходуются", и вся задача завершается с 0. Но это не должно.

  • Первый вопрос: как заставить wrong задача потерпеть неудачу с ненулевым кодом выхода? (решено, см. ответ ниже)
  • Второй вопрос: почему error событие выпущено в less() вызов с последующим канальным потоком не делает всю задачу по возврату ненулевого кода выхода? Ненулевое значение возвращается в некоторых других подобных случаях, например. в отказе Jade или ESLint. (еще не решено)

Версии:

  • узел 5.11.0
  • нпм 3.8.6
  • глоток 3.9.1
  • без глотка 3.1.0

1 ответ

Слушай error событие, а затем выйдите из процесса явно:

gulp.task('wrong', function () {
  return gulp
    .src('invalid-styles.less')
    .pipe(less().on('error', function(error) {
      console.log(error.message);
      process.exit(1);
    }))
    .pipe(gulp.dest('generated-styles.css'));
});
Другие вопросы по тегам