usar tutorial instalar instalando con compilar como node.js gulp

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.