吞噬 – 导致任务停止的错误

我正在使用Gulp和Browserify一起设置一个项目,但是我在获取监视命令时会遇到一些小问题,以便发现错误并继续观察。

我使用默认任务(下面的代码)运行“gulp”命令。 这个任务使用watch设置来捕获我的文件中的任何更改,然后使用Browserify编译我的js,并编译我的scss文件。

一切顺利,除非我在我的js语法错误。 基本上,如果发生这种情况控制台显示错误,但不再捕捉到我的js文件的更改。

我最初省略了导致整个监视任务失败的error handling,但是现在我已经在那里了 – 监视任务仍在继续,对于我的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,但我testing的任务是默认任务 – 处理js的任务是“js-dev”任务。

为什么我的代码会导致js-dev任务失败,当我的sass-dev任务具有相同的error handling不会呢?

谢谢!

这是一个猜测,但error handling程序可能需要发出一个事件:

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

从我自己的gulp.js ,以相同的方式处理gulp.js