Подтвердить что ты не робот

Gulp -sass, часы останавливаются, когда недопустимое имя свойства

часы останавливаются, когда появляются сообщения об ошибках.

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" в командной строке при возникновении ошибки.

4b9b3361

Ответ 1

Этот ответ добавлен, чтобы отразить последние изменения в Gulp. Я сохранил первоначальный ответ, относящийся к вопросу OP. Если вы используете 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

Подробнее о gulp-sass параметрах и настройках, на nmpjs.org


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

Ответ 2

Фактически выше anwsers не работает для меня (Im использует 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))
});

В gulp -sass 3.x.x, когда я использовал "sass.logError(err);" Я постоянно получаю ошибку, что "this.emit(" end "), не является функцией". Теперь, когда я использую:

.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 пользователей:

Мне понравилось решение @dtotheftp выше, касающееся Gulp 2.x. Интересно, что это не работает unter 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)

Обратите внимание, что жалоба не поступает из его this.emit() в gulpfile, а скорее из sass node -module, следовательно, из предыдущей строки.

Это работает для меня:

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

Я получаю все ошибки², и часы никогда не заканчиваются;) (Я также использую plumber() сразу после gulp.src(), что может помочь в этом).

(Да, исправление может быть очень нелогичным, поскольку sass.logError, как говорят, основан на gutil...)

-

² также на макросах undefined, которые по какой-то причине молчали до моего подключения.