2014-12-03 115 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'); 
}; 

被盗。