我正在运行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']);
});
Run Code Online (Sandbox Code Playgroud)
任何时候我的CoffeeScript gulp手表都会出现错误停止 - 显然不是我想要的.
gulp.watch(['./app/**/*.coffee'],['scripts']).on('error', swallowError);
gulp.watch('./app/**/*.scss',['scss']).on('error', swallowError);
function swallowError (error) { error.end(); }
Run Code Online (Sandbox Code Playgroud)
但它似乎没有用.
我究竟做错了什么?
为了回应@Aperçu的回答,我修改了我的swallowError
方法并尝试了以下方法:
gulp.task('scripts', function () {
gulp.src('./app/script/*.coffee')
.pipe(coffee({ bare: true }))
.pipe(gulp.dest('./public/js'))
.on('error', swallowError);
});
Run Code Online (Sandbox Code Playgroud)
重新启动,然后在我的咖啡文件中创建语法错误.同样的问题:
[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)
Run Code Online (Sandbox Code Playgroud)
Bal*_*zar 257
你的swallowError
功能应该是这样的:
function swallowError (error) {
// If you want details of the error in the console
console.log(error.toString())
this.emit('end')
}
Run Code Online (Sandbox Code Playgroud)
我认为你必须在error
正在watch
崩溃的任务事件上绑定这个函数,而不是任务,因为那不是问题所在,你应该在每个可能失败的任务上设置这个错误回调,就像你有的插件一样.错过了一个;
或其他东西,以防止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'))
})
Run Code Online (Sandbox Code Playgroud)
或者,如果你不介意包含另一个模块,你可以使用gulp-util的日志功能来阻止你在你的:中声明一个额外的函数:gulpfile
.on('error', gutil.log)
Run Code Online (Sandbox Code Playgroud)
但我可能会建议看一下这个令人敬畏的gulp-plumber插件,它用于删除事件的onerror
处理程序error
,导致流中断.它使用起来非常简单,它可以阻止您捕获可能失败的所有任务.
gulp.src('./app/script/*.coffee')
.pipe(plumber())
.pipe(coffee({ bare: true }))
.pipe(gulp.dest('./public/js'))
Run Code Online (Sandbox Code Playgroud)
有关插件的创建者在本文中有关此内容的更多信息.
use*_*819 20
以上例子对我不起作用.以下做了:
var plumber = require('gulp-plumber');
var liveReload = require('gulp-livereload');
var gutil = require('gulp-util');
var plumber = require('gulp-plumber');
var compass = require('gulp-compass');
var rename = require('gulp-rename');
var minifycss = require('gulp-minify-css');
var notify = require('gulp-notify');
gulp.task('styles', function () {
//only process main.scss which imports all other required styles - including vendor files.
return gulp.src('./assets/scss/main.scss')
.pipe(plumber(function (error) {
gutil.log(error.message);
this.emit('end');
}))
.pipe(compass({
config_file: './config.rb',
css: './css'
, sass: './assets/scss'
}))
//minify files
.pipe(rename({suffix: '.min'}))
.pipe(minifycss())
//output
.pipe(gulp.dest('./css'))
.pipe(notify({message: 'Styles task complete'}));
});
gulp.task('watch', function () {
liveReload.listen();
gulp.watch('assets/scss/**/*.scss', ['styles']);
});
Run Code Online (Sandbox Code Playgroud)