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" в командной строке при возникновении ошибки.
Ответы
Ответ 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, которые по какой-то причине молчали до моего подключения.