gulp-sass,当无效的属性名称时停止观察

olo*_*olo 40 node.js gulp

发生错误消息时,监视停止.

stream.js:94
      throw er; // Unhandled stream error in pipe.
            ^
source string:51: error: invalid property name 
Run Code Online (Sandbox Code Playgroud)

我怎样才能保持手表运行,只是告诉我错误位于何处.

grunt可以处理错误而不需要停止,

styleSheet.scss:41: error: invalid property name
Run Code Online (Sandbox Code Playgroud)

否则,我需要在发生错误时在命令行中输入"gulp".

cha*_*tic 83

此答案已附加,以反映Gulp最近的变化.我保留了原始回复,与OPs问题相关.如果您使用的是Gulp 2.x,请跳至第二部分


最初的回应,Gulp 1.x

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

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

gulp.task('sass', function () {
  gulp.src('./*.scss')
    .pipe(sass())
    .pipe(gulp.dest('./'));
});
Run Code Online (Sandbox Code Playgroud)

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

.pipe(sass({errLogToConsole: true}))
Run Code Online (Sandbox Code Playgroud)

这是错误记录的任务应该是这样的:

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

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

[gulp] [gulp-sass] source string:1: error: invalid top-level expression
Run Code Online (Sandbox Code Playgroud)

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


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'));
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这应该是标准的,不知道为什么你会让观察者停下来.谢谢! (6认同)

bor*_*r4g 11

实际上以上的anwsers对我不起作用(我使用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))
});
Run Code Online (Sandbox Code Playgroud)

当我使用"sass.logError(err);"时,在gulp-sass 3.xx中 我经常发现错误"this.emit('end');不是函数".现在当我使用时:

.pipe(sass({ outputStyle: 'compressed' })
    .on('error', sass.logError)
 )
Run Code Online (Sandbox Code Playgroud)

一切都像魅力一样


dto*_*efp 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)
Run Code Online (Sandbox Code Playgroud)