Gulp бесшумная ошибка - ошибки не печатаются на консоли

Мой gulp файл не испускает никаких ошибок ни в стандартных методах gulp, как gulp.src() с несуществующими путями, ни при возникновении ошибок потока, вызываемых их обработчиком. Я включил простой файл, который молча завершает работу, печатает только начальные и завершенные сообщения по умолчанию.

var //
  gulp      = require( "gulp" ),
  gulpUtil  = require( "gulp-util" ),
  sass      = require( "gulp-ruby-sass");


 gulp.task( "default", function() {
  gulp.src( "path-that-does-not-exist.scss" )
  .pipe( sass() )
  .on( "error", function( err ) {
    console.log( "this should print" );
  })
  .pipe( gulp.dest( "./client-side/public/compiled" ) );
 });

Ответ 1

Хорошо, поэтому Gulp работает "правильно". Но то, что я слышу в вашем вопросе, заключается в том, что было бы хорошо, если бы Gulp мог просто сказать вам, что файл не существует.

Я использую gulp-expect-file как таковой

var coffee = require('gulp-coffee');
var expect = require('gulp-expect-file');

gulp.task('mytask', function() {
  var files = ['idontexist.html'];

  return gulp.src(files)
    .pipe(expect(files))
    .pipe(coffee());
});

Теперь вы увидите это в терминале:

example output

Ответ 2

Если путь не существует, gulp.src успешно ничего не пропускает через канал, задачи sass и dest никогда не вызываются, и с этим заканчивается поток gulp.src, сигнализирующий о задании по умолчанию завершено и gulp завершено. Он сделал именно то, что вы сказали ему.: D

Ответ 3

Я согласен с использованием @adamjgrant gulp-expect-file.

var expect = require('gulp-expect-file'),
    gulp = require('gulp');

gulp.task('task', function() {
    var files = ['src/js/*.js'];
    gulp
        .src(files)
        .pipe(expect(files));
});

PS: Grunt.js обрабатывает это с помощью nonull:true

lint: {
    src: ['gruntfile.js', 'gulpfile.js'],
    nonull: true
}