2014-12-03 54 views
1

我使用Gulp和Browserify一起設置了一個項目,但我在獲取watch命令時發現了一些問題,以便捕獲錯誤並繼續觀察。Gulp - 導致任務停止的錯誤

我使用默認任務(下面的代碼)運行'gulp'命令。此任務使用watch設置,以捕獲我的文件中的任何更改,然後使用Browserify編譯我的js,並編譯我的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的」任務。

當我的sass-dev任務具有相同的錯誤處理功能時,爲什麼我的代碼會導致js-dev任務失敗?

謝謝!

回答

3

這是一個猜測,但錯誤處理程序可能需要發出一個事件:從我自己的gulp.js它處理以同樣的方式browserified

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

被盜。