当无效的财产名称时,手表停止

当出现错误信息时手表停止。

stream.js:94 throw er; // Unhandled stream error in pipe. ^ source string:51: error: invalid property name 

我如何保持观看状态,只是告诉我错误在哪里。

咕噜可以处理错误,不需要停下来,

 styleSheet.scss:41: error: invalid property name 

否则,我需要在错误发生时在命令行中input“gulp”。

这个答案已经被附上,以反映最近对Gulp的改变。 我保留了最初的答复,与OP的问题相关。 如果您使用的是Gulp 2.x,请跳到第二部分


原始答复,Gulp 1.x

您可以通过将errLogToConsole: true作为选项传递给sass()方法来更改此默认行为。

你的任务可能看起来像这样,现在:

 gulp.task('sass', function () { gulp.src('./*.scss') .pipe(sass()) .pipe(gulp.dest('./')); }); 

更改.pipe(sass())行以包含errLogToConsole: true选项:

 .pipe(sass({errLogToConsole: true})) 

这是错误日志logging的任务应该如下所示:

 gulp.task('sass', function () { gulp.src('./*.scss') .pipe(sass({errLogToConsole: true})) .pipe(gulp.dest('./')); }); 

错误输出现在将内联,如下所示:

 [gulp] [gulp-sass] source string:1: error: invalid top-level expression 

您可以在nmpjs.org上阅读更多关于gulp gulp-sass选项和configuration的信息


Gulp 2.x

在Gulp 2.x errLogToConsole可能不再使用。 幸运的是, gulp-sass有一个处理错误的方法。 on('error', sass.logError)

 gulp.task('sass', function () { gulp.src('./sass/**/*.scss') .pipe(sass().on('error', sass.logError)) .pipe(gulp.dest('./css')); }); 

如果您需要更细粒度的控制,请随时提供callback函数:

 gulp.task('sass', function () { gulp.src('./sass/**/*.scss') .pipe(sass() .on('error', function (err) { sass.logError(err); this.emit('end'); }) ) .pipe(gulp.dest('./css')); }); 

如果您需要更多关于stream程控制的信息,这是一个很好的线索: https : //github.com/gulpjs/gulp/issues/259#issuecomment-55098512

其实上面的漫游者不适合我(我使用gulp-sass 3.XX)。 什么工作:

  gulp.task('sass', function () { return gulp.src(config.scssPath + '/styles.scss') .pipe(sourcemaps.init()) .pipe(sass({ outputStyle: 'compressed' }) .on('error', sass.logError) ) .pipe(sourcemaps.write('./')) .pipe(gulp.dest(config.cssPath)) }); 

在我使用“sass.logError(err)”的时候, 我经常收到错误,“this.emit('end');不是一个函数”。 现在,当我使用:

 .pipe(sass({ outputStyle: 'compressed' }) .on('error', sass.logError) ) 

一切都像魅力一样工作

errLogToConsole “^ 2.0.0”中, errLogToConsole选项将不再起作用。 相反, gulp-sass有一个内置的错误日志loggingcallback,它使用gulp-util 。 另外,因为gulp在处理错误时遇到了一些问题,所以如果你使用watch你将不得不调用this.emit('end') https://github.com/gulpjs/gulp/issues/259#issuecomment -55098512

 var sass = require('gulp-sass'); //dev sass(config.sassDev) .on('error', function(err) { sass.logError(err); this.emit('end'); //continue the process in dev }) ) //prod sass(config.sassProd).on('error', sass.logError) 

一位负责Gulp 3用户的人:

上面我喜欢@dtotheftp解决scheme,关于gulp 2.x. 有趣的是,它不起作用的Gulp3,至less不在@ 3.9.1下:

 .on('error', function(err){ sass.logError(err); this.emit('end'); //continue the process in dev }) 

得到我

 TypeError: this.emit is not a function at Function.logError (/depot/myproject/node_modules/gulp-sass/index.js:181:8) 

请注意,投诉不是来自他的this.emit() ,而是来自sass节点模块,因此来自上一行。

这适用于我:

 .on('error', function(err){ gutil.log(err); this.emit('end'); }) 

我得到所有的错误²,手表永远不会结束;)(我也使用plumber()gulp.src() ,这可能会有所帮助)。

(是的,修正可能是非常不合逻辑的,因为sass.logError据说基于gutil …)

²还有一些未定义的macros,无论什么原因,在我的设置之前都没有声音。