我正在运行gulp 3.6.2,并具有从在线示例中设置的以下任务
gulp.task('watch', ['default'], function () { gulp.watch([ 'views/**/*.html', 'public/**/*.js', 'public/**/*.css' ], function (event) { return gulp.src(event.path) .pipe(refresh(lrserver)); }); gulp.watch(['./app/**/*.coffee'],['scripts']); gulp.watch('./app/**/*.scss',['scss']); });
每当我的CoffeeScript gulp手表出现错误时,手表就会停止-显然不是我想要的。
正如其他地方推荐的那样
gulp.watch(['./app/**/*.coffee'],['scripts']).on('error', swallowError); gulp.watch('./app/**/*.scss',['scss']).on('error', swallowError); function swallowError (error) { error.end(); }
但它似乎不起作用。
我究竟做错了什么?
响应@Aperçu的回答,我修改了swallowError方法并尝试了以下操作:
swallowError
gulp.task('scripts', function () { gulp.src('./app/script/*.coffee') .pipe(coffee({ bare: true })) .pipe(gulp.dest('./public/js')) .on('error', swallowError); });
重新启动,然后在我的coffee文件中创建语法错误。相同的问题:
[gulp] Finished 'scripts' after 306 μs stream.js:94 throw er; // Unhandled stream error in pipe. ^ Error: W:\bariokart\app\script\trishell.coffee:5:1: error: unexpected * * ^ at Stream.modifyFile (W:\bariokart\node_modules\gulp-coffee\index.js:37:33) at Stream.stream.write (W:\bariokart\node_modules\gulp-coffee\node_modules\event-stream\node_modules\through\index.js:26:11) at Stream.ondata (stream.js:51:26) at Stream.EventEmitter.emit (events.js:95:17) at queueData (W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:43:21) at next (W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:71:7) at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\map-stream\index.js:85:7 at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\lib\src\bufferFile.js:8:5 at fs.js:266:14 at W:\bariokart\node_modules\gulp\node_modules\vinyl-fs\node_modules\graceful-fs\graceful-fs.js:104:5 at Object.oncomplete (fs.js:107:15)
您的swallowError函数应如下所示:
function swallowError (error) { // If you want details of the error in the console console.log(error.toString()) this.emit('end') }
我认为您必须error在任务下降而不是watch任务下降时绑定此函数,因为这不是问题所在,因此应在每个可能失败的任务上设置此错误回调,例如当您遇到故障时插件会中断错过了一个;或其他东西,以防止watch任务停止。
error
watch
;
例子 :
gulp.task('all', function () { gulp.src('./app/script/*.coffee') .pipe(coffee({ bare: true })) .on('error', swallowError) .pipe(gulp.dest('./public/js')) gulp.src('css/*.scss') .pipe(sass({ compass: true })) .on('error', swallowError) .pipe(cssmin()) .pipe(gulp.dest('dist')) })
或者,如果您不介意包含另一个模块,则可以使用 gulp-util 的 log 函数,以防止您在自己的函数中声明其他函数: gulpfile
gulpfile
.on('error', gutil.log)
但我建议您看一下很棒的 gulp-plumber 插件,该插件用于删除事件的onerror处理程序error,从而导致流中断。它非常简单易用,可阻止您捕获所有可能失败的任务。
onerror
gulp.src('./app/script/*.coffee') .pipe(plumber()) .pipe(coffee({ bare: true })) .pipe(gulp.dest('./public/js'))
有关插件的创建者在本文上提供了有关此内容的更多信息。