2014-12-03 2 views
1

Я создаю проект с использованием Gulp вместе с Browserify, но у меня есть небольшая проблема с получением команды watch, чтобы поймать ошибки и продолжить просмотр.Gulp - ошибка, вызывающая задачу для остановки

Я запускаю команду «gulp», используя задание по умолчанию (код ниже). Эта задача настраивается с использованием часов, чтобы поймать любые изменения в моих файлах, а затем компилирует мои js с помощью Browserify, а также компилирует мои scss-файлы.

Все идет хорошо, если я не делаю синтаксическую ошибку в js. В основном, если это произойдет, консоль показывает ошибку, но перестает больше пересматривать мои файлы js.

Я изначально отказался от обработки ошибок, из-за которой вся задача просмотра завершилась с ошибкой, но теперь у меня это есть - задача часов все еще идет, и она отлично работает для моего scss (даже если я делаю синтаксическую ошибку), но он не поймает никаких изменений на мои js.

var gulp  = require('gulp'), 
    gutil  = require('gulp-util'), 
    browserify = require('browserify'), 
    changed  = require('gulp-changed'), 
    compass  = require('gulp-compass'), 
    uglify  = require('gulp-uglify'), 
    livereload = require('gulp-livereload'), 
    transform = require('vinyl-transform'), 
    sassSources = ['_src/sass/**/*.scss'], 
    jsSources = ['_src/js/admin.js', '_src/js/main.js']; 

var onError = function (err) { 
    gutil.log(gutil.colors.green(err)); 
}; 

gulp.task('js', function() { 

    var browserified = transform(function(filename) { 
     var b = browserify(filename); 
     return b.bundle(); 
    }); 

    return gulp.src(jsSources) 
     .pipe(browserified) 
     .pipe(uglify()) 
     .pipe(gulp.dest('assets/js')) 

}); 

gulp.task('js-dev', function() { 

    var browserified = transform(function(filename) { 
     var b = browserify(filename); 
     return b.bundle(); 
    }); 

    return gulp.src(jsSources) 
     .pipe(browserified) 
      .on('error', onError) 
     .pipe(gulp.dest('assets/js')) 
     .pipe(livereload()) 

}); 

gulp.task('sass', function() { 

    gulp.src(sassSources) 
     .pipe(compass({ 
      style: 'compressed', 
      sass: '_src/sass', 
      css: 'assets/css', 
      font: 'assets/fonts', 
      image: 'assets/images', 
      javascript: 'assets/js', 
      relative: true, 
      require: ['breakpoint'] 
     })) 
     .pipe(gulp.dest('assets/css')) 

}); 

gulp.task('sass-dev', function() { 

    gulp.src(sassSources) 
     .pipe(changed('assets/css')) 
     .pipe(compass({ 
      style: 'expanded', 
      sass: '_src/sass', 
      css: 'assets/css', 
      font: 'assets/fonts', 
      image: 'assets/images', 
      javascript: 'assets/js', 
      relative: true, 
      require: ['breakpoint'] 
     })) 
      .on('error', onError) 
     .pipe(gulp.dest('assets/css')) 
     .pipe(livereload()) 

}); 

gulp.task('watch', function() { 
    livereload.listen() 
    gulp.watch(jsSources, ['js-dev']) 
    gulp.watch(sassSources, ['sass-dev']) 
    gulp.watch(['**/*.php']).on('change', function(file) { livereload.changed(file.path) }) 
}) 

gulp.task('default', ['watch', 'js-dev', 'sass-dev']) 
gulp.task('build', ['js', 'sass']) 

Приведенный выше код является вся моя gulpfile но задача я тестирование задача по умолчанию - и обращения с JS задачей является задача "JS-DEV.

Почему мой код вызывает сбой задачи js-dev, когда моя задача sass-dev с той же обработкой ошибок не работает?

Спасибо!

ответ

3

Это предположение, но обработчик ошибок может понадобиться испускать событие:

var onError = function (err) { 
    gutil.log(gutil.colors.green(err.message)); 
    this.emit('end'); 
}; 

Stolen от моей gulp.js который обрабатывает browserified таким же образом.

Смежные вопросы