gulp-notify - получить имя файла, а не весь путь, с ошибкой

Я использую gulp-notify а также gulp-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 но я не могу найти больше тегов, которые могу использовать, чтобы получить то, что я хочу показать.

Спасибо!

1 ответ

Решение

Вот как я решил эту проблему:

.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", поэтому я не смог разделить каждый фрагмент информации, которую я хотел, на отдельную строку.

Другие вопросы по тегам