【问题标题】:gulp-ruby-sass plugin not throwing error, only logging the error itselfgulp-ruby-sass 插件不抛出错误,只记录错误本身
【发布时间】:2015-11-12 14:23:08
【问题描述】:

在页面上 gulp ruby​​ sass https://www.npmjs.com/package/gulp-ruby-sass/

它说“使用 on('error', cb) 侦听器处理 Sass 错误。gulp-ruby-sass 会像 gulp 插件一样抛出错误,但会流式传输错误文件,因此您也可以在浏览器中看到 Sass 错误。”

然后我应该能够记录它说它抛出的错误,但是当发生错误时它会被记录到控制台并且我的错误回调永远不会被调用,这是我的代码:

gulp.task("css", function() {

   return sass(paths.css.in)
          .on('error', logError)
          .pipe(gulp.dest(paths.css.out));

});

我是不是做错了什么?

【问题讨论】:

  • 您尝试记录的错误是什么?如果这是一个快速修复,我可以在这里提供帮助,否则让我们将其移至问题跟踪器。
  • 只是一般的 sass 到 css 编译错误。插件页面声明它将抛出错误,并且可以使用错误事件进行处理。但是,当我强制出现语法错误时,sass 插件的实现代码会将错误记录到控制台,并且不会抛出任何错误,因此代码中的 logError 处理程序永远不会被调用。很遗憾,因为我在我的通用错误处理程序中调用了有用的 gutil.beep 方法来通知。 sass 插件在出现错误时不会通知,而是静默登录到控制台。
  • 谢谢,可以吗?我不使用 github,如果有什么不同,我也在 Windows 7 上运行它

标签: javascript css ruby sass gulp


【解决方案1】:

实际上今天刚刚解决了这个问题。使用版本 1.3.0 中的 emitCompileError 选项。

请注意,我们无法记录特定错误,因为:

  • Sass 不会将它们输出为错误,就像 stderr 和 stdout 一样,具体取决于您是编译单个文件还是目录
  • node.js 的 stderr 和 stdout 消息行不能保证在它们最初发出的组中可用,因此我们无法可靠地解析输出。 https://github.com/sass/sass/issues/1715#issuecomment-98213569

将来我可能会在幕后进行一些逐行解析以解决此问题。

有关更多信息,请参阅 gulp-ruby-sass 自述文件和问题 https://github.com/sindresorhus/gulp-ruby-sass/issues/209

【讨论】:

  • 谢谢!它适用于该选项是的。我在 gulp-ruby-sass/logger.js 第 40 行:gutil.log(data);如您所知,编译错误通过那里记录。在“else”之前添加另一个“else if”子句并检查字符串“Invalid CSS”的“data”变量输出消息并在流上发出错误事件是否不可靠?该字符串似乎在所有编译错误中输出。 else if (/Invalid CSS/.test(data)) {stream.emit("error", new Error(data)); }
  • 我们可以。发现这种行为后,我有点担心解析 stdout/err:github.com/sass/sass/issues/1715#issuecomment-98213569
  • 但我认为我们不会使用命令行可执行文件,它会显示损坏的输出问题。我们可以在任务期间抛出错误,但不能提供可靠的良好错误消息。在我处理下一组问题后,我将再次查看此问题。
猜你喜欢
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2015-03-25
  • 2017-05-13
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
相关资源
最近更新 更多