Gulp-notify -获取文件名,而不是整个路径,有错误



我使用gulp-notifygulp-plumber捕获gulp-sass的任何错误,并在它在gulp中抛出错误并停止整个构建过程之前通知我。然而,gulp-notify显示的错误并不是特别有用……它包含错误文件的整个路径;我很可能知道文件的路径是什么,所以我只需要知道文件名和行号(和列号作为添加的,但不是必要的奖励),以及实际的错误消息。下面是我的代码:

gulp.task('styles', function () {
    var onError = function(err) {
      notify.onError({
        title:    "Gulp",
        subtitle: "Build Error!",
        message:  "<%= error.message %>",
        sound:    "Beep"
      })(err);
      this.emit('end');
    };
    gulp.src('assets/styles/source/style.scss')
        .pipe(plumber({errorHandler: onError}))
        .pipe(sass({
            style: 'compressed',
            errLogToConsole: false
         }))
        .pipe(gulp.dest('assets/styles/build'))
        .pipe(autoprefixer({
            browsers: ['last 2 versions', 'ie 9', 'ios 6', 'android 4'],
            cascade: false
        }))
        .pipe(gulp.dest('assets/styles/build'))
        .pipe(minifyCSS({
            keepSpecialComments: '*'
        }))
        .pipe(gulp.dest('./'))
        .pipe(reload({stream: true}));
});

还有更多(像gulp-watch, browsersync,一些JS的东西),但我认为以上是所有需要解决的问题。如果没有,请告诉我!

所以我的问题是,我如何修改错误消息,只显示我的文件名,行号和错误消息(例如_header。Scss:17 -无效的属性名称)?目前我正在使用error.message,但我找不到任何更多的标签,我可以用它来获得我想要显示的东西。

谢谢!

我是这样解决这个问题的:

.pipe(sass(
    ({
      style: 'compressed',
      errLogToConsole: false,
      onError: function(error) {
        notify({
          title: "SASS ERROR",
          message: "line " + error.line + " in " + error.file.replace(/^.*[\/]/, '') + "n" + error.message
        }).write(error);
      }
    })
  )
)

我还注意到,我只能提供一个换行符"n",所以我不能将我想要的每条信息拆分为单独的一行。

最新更新