【问题标题】:gulp-sass, watch stops when invalid property namegulp-sass,当属性名称无效时手表停止
【发布时间】:2014-01-12 21:21:24
【问题描述】:

出现错误消息时手表停止。

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”。

【问题讨论】:

  • 看看this GitHub issue:团​​队似乎还没有就这个话题达成共识。

标签: node.js gulp


【解决方案1】:

已附加此答案以反映 Gulp 的最新更改。为了与 OPs 问题相关,我保留了原始回复。如果您使用的是 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}))

这是带有错误日志记录的任务的样子:

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

在 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

【讨论】:

  • 这应该是标准的,不知道你为什么要让观察者停下来。谢谢!
  • 我在 ionic 中使用 sass 遇到了这个问题。看起来这应该是明显的默认行为。
  • @Notflip 我认为文档的这一部分讨论了默认值 — gulp-sass-specific-options。看起来默认使用gutilpluginError,所以你可以做更复杂的错误处理。
  • @brad 我认为文档的这一部分讨论了默认值 — gulp-sass-specific-options。貌似默认使用gutilpluginError,所以可以做更复杂的错误处理。
  • errLogToConsole 已弃用。请参阅@dtohefp 的回答。
【解决方案2】:

实际上上面的 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))
});

当我使用“sass.logError(err);”时,在 gulp-sass 3.x.x 中我经常收到“this.emit('end'); is not a function”的错误。现在当我使用时:

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

一切都像魅力一样运作

【讨论】:

    【解决方案3】:

    在 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)
    

    【讨论】:

      【解决方案4】:

      Gulp 3 用户注意事项:

      关于 gulp 2.x,我喜欢上面的 @dtotheftp 解决方案。有趣的是,它在 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 节点模块,因此来自前一行。

      这对我有用:

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

      我确实遇到了所有错误²,而且手表永远不会结束;)(我也在gulp.src() 之后使用plumber(),这可能会有所帮助)。

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

      ²也适用于未定义的宏,无论出于何种原因,这些宏在我的设置之前都保持沉默。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 2018-01-18
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多