监视会停止。
stream.js:94
throw er; // Unhandled stream error in pipe.
^
source string:51: error: invalid property name
我如何保持手表运行,并告诉我错误位于何处。
grunt可以处理错误而不需要停止,
styleSheet.scss:41: error: invalid property name
否则,我需要在发生错误时在命令行中输入“gulp”。
答案 0 :(得分:83)
此答案已附加,以反映Gulp最近的变化。我保留了原始回复,与OPs问题相关。如果您使用的是Gulp 2.x,请跳至第二部分
您可以通过将errLogToConsole: true
作为选项传递给sass()
方法来更改此默认行为。
您的任务现在看起来像这样:
gulp.task('sass', function () {
gulp.src('./*.scss')
.pipe(sass())
.pipe(gulp.dest('./'));
});
更改.pipe(sass())
行以包含errLogToConsole: true
选项:
.pipe(sass({errLogToConsole: true}))
这就是错误记录的任务应该是这样的:
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-sass
options and configuration的更多信息
在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'));
});
如果您需要更细粒度的控制,请随时提供回调函数:
gulp.task('sass', function () {
gulp.src('./sass/**/*.scss')
.pipe(sass()
.on('error', function (err) {
sass.logError(err);
this.emit('end');
})
)
.pipe(gulp.dest('./css'));
});
如果您需要有关过程控制的更多信息,这是一个很好的阅读线程:https://github.com/gulpjs/gulp/issues/259#issuecomment-55098512
答案 1 :(得分:11)
实际上,以上的避孕器对我不起作用(我正在使用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);”时,在gulp-sass 3.x.x中我经常发现错误“this.emit('end');不是函数”。现在我正在使用:
.pipe(sass({ outputStyle: 'compressed' })
.on('error', sass.logError)
)
一切都像魅力一样
答案 2 :(得分:6)
在gulp" ^ 2.0.0"选项errLogToConsole
将不再有效。相反,gulp-sass
有一个内置的错误记录回调,它使用了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)
答案 3 :(得分:2)
为Gulp 3用户提供支持:
我喜欢上面的@dtotheftp解决方案,关于gulp 2.x.有趣的是,它不适用于Gulp3,至少不是@ 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)
请注意,投诉不是来自gulpfile中的this.emit()
,而是来自sass node-module,因此来自前一行。
这对我有用:
.on('error', function(err){
gutil.log(err);
this.emit('end');
})
我确实收到了所有错误²,手表永远不会结束;)(我也在plumber()
之后使用gulp.src()
,这可能有助于此。)
(是的,修复可能非常不合逻辑,因为据说sass.logError基于gutil ...)
-
²还有未定义的宏,无论出于何种原因,它在我的设置之前都是静默的。