node.js - tutorial - gulp-sass, watch se detiene cuando el nombre de propiedad no es válido
instalando gulp (4)
watch se detiene cuando se producen mensajes de error.
stream.js:94
throw er; // Unhandled stream error in pipe.
^
source string:51: error: invalid property name
Cómo puedo seguir vigilando y solo decirme dónde se encuentra el error.
gruñido podría lidiar con errores y no necesita detenerse,
styleSheet.scss:41: error: invalid property name
de lo contrario, tendré que seguir escribiendo "gulp" en la línea de comandos cuando ocurra un error.
En realidad, por encima de los awsers no funciona para mí (estoy usando gulp-sass 3.XX). Lo que realmente funcionó:
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))
});
En gulp-sass 3.xx cuando estaba usando "sass.logError (err);" Constantemente recibo el error de que "this.emit (''end''); no es una función". Ahora cuando estoy usando:
.pipe(sass({ outputStyle: ''compressed'' })
.on(''error'', sass.logError)
)
todo funciona como un hechizo
En trago "^ 2.0.0" la opción errLogToConsole
ya no funcionará. En cambio, gulp-sass
tiene una devolución de llamada de registro de errores incorporada que usa gulp-util
bajo el capó. Además, como gulp tiene algunos problemas para matar el proceso de errores, si está usando con watch
, tendrá que llamar a 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)
Esta respuesta se adjuntó para reflejar los cambios recientes en Gulp. He conservado la respuesta original, por relevancia para la pregunta de PO. Si está utilizando Gulp 2.x, salte a la segunda sección
Respuesta original, Gulp 1.x
Puede cambiar este comportamiento predeterminado pasando errLogToConsole: true
como una opción al método sass()
.
Su tarea podría verse más o menos así, ahora mismo:
gulp.task(''sass'', function () {
gulp.src(''./*.scss'')
.pipe(sass())
.pipe(gulp.dest(''./''));
});
Cambie la línea .pipe(sass())
para incluir la opción errLogToConsole: true
:
.pipe(sass({errLogToConsole: true}))
Esto es lo que debería ser la tarea, con registro de errores:
gulp.task(''sass'', function () {
gulp.src(''./*.scss'')
.pipe(sass({errLogToConsole: true}))
.pipe(gulp.dest(''./''));
});
La salida de errores ahora estará en línea, así:
[gulp] [gulp-sass] source string:1: error: invalid top-level expression
Puede leer más sobre gulp-sass
opciones y configuraciones de gulp-sass
en nmpjs.org
Gulp 2.x
En Gulp 2.x, errLogToConsole
ya no se puede usar. Afortunadamente, gulp-sass
tiene un método para manejar errores. Use on(''error'', sass.logError)
:
gulp.task(''sass'', function () {
gulp.src(''./sass/**/*.scss'')
.pipe(sass().on(''error'', sass.logError))
.pipe(gulp.dest(''./css''));
});
Si necesita un control más detallado, no dude en proporcionar una función de devolución de llamada:
gulp.task(''sass'', function () {
gulp.src(''./sass/**/*.scss'')
.pipe(sass()
.on(''error'', function (err) {
sass.logError(err);
this.emit(''end'');
})
)
.pipe(gulp.dest(''./css''));
});
Este es un buen hilo de lectura si necesita más información sobre el control de procesos: https://github.com/gulpjs/gulp/issues/259#issuecomment-55098512
Un aviso para los usuarios de Gulp 3:
Me gustó la solución @dtotheftp anterior, con respecto a gulp 2.x. Curiosamente, no funciona después de Gulp3, al menos no bajo @ 3.9.1:
.on(''error'', function(err){
sass.logError(err);
this.emit(''end''); //continue the process in dev
})
me atrapa
TypeError: this.emit is not a function
at Function.logError (/depot/myproject/node_modules/gulp-sass/index.js:181:8)
Tenga en cuenta que la queja no proviene de this.emit()
en el archivo gulpfile sino del módulo de nodos sass, por lo tanto, de la línea anterior.
Esto funciona para mí:
.on(''error'', function(err){
gutil.log(err);
this.emit(''end'');
})
Obtengo todos los errores², y el reloj nunca termina;) (También estoy usando plumber()
justo después de gulp.src()
, lo que podría ayudar con eso).
(Sí, la solución podría ser muy ilógica, ya que se dice que sass.logError se basa en gutil ...)
-
También en macros indefinidos que se silenciaron antes en mi configuración por cualquier razón.