grunt throw "Proceso recursivo.nextTick detectado"


88

Estoy ejecutando Lion 10.9.2 con nodejs v0.10.26

Quiero configurar una compilación automatizada de archivos sass y una recarga en vivo con gruñido, nada complicado pero ...

Al ejecutar grunt watchme sale el siguiente error

(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.

util.js:35
  var str = String(f).replace(formatRegExp, function(x) {
                      ^
RangeError: Maximum call stack size exceeded

aquí está el Gruntfile.js

module.exports = function(grunt) {

    // Project configuration.
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),

        sass: {
            dist: {
                files: {
                    'assets/css/styles.css': 'assets/sass/styles.scss'
                }
            }
        },
        watch: {
            all: {
                files: 'index.html', // Change this if you are not watching index.html
                options: {
                    livereload: true  // Set livereload to trigger a reload upon change
                }
            },
            css: {
                files:  [ 'assets/sass/**/*.scss' ],
                tasks:  [ 'sass' ],
                options: {
                    spawn: false
                }
            },
            options: {
                livereload: true // Set livereload to trigger a reload upon change
            }
        }

    });

    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-sass');

    grunt.registerTask('watch', [ 'watch']);

    grunt.registerTask('default', [ 'sass', 'watch' ]);

};

y aquí está el package.json

{
  "name": "application",
  "version": "0.0.1",
  "private": true,
  "devDependencies": {
    "grunt": "~0.4.2",
    "grunt-contrib-watch": "~0.5.3",
    "grunt-contrib-sass": "~0.7.3"
  }
}

Respuestas:


298

Finalmente descubrí un problema similar que estaba teniendo con SASS. Estaba usando

grunt.registerTask('sass', [ 'sass']);

El truco era que a Grunt no parece gustarle la repetición de nombres. Cuando cambio a

grunt.registerTask('styles', [ 'sass']);

Todo funcionó como debería.


58
+9000: este es un error estúpido y su solución me ahorró tiempo tratando de averiguarlo. ¡Gracias!
jkat98

2
genial, gracias por ver esto. Me di cuenta de que no necesitamos registrar una sola tarea de todos modos, porque grunt ejecutará 'grunt sass' cuando lo escribas en la línea de comandos.
stefan

Gracias por detectar esto, también encontré esto y el error no es muy útil.
Kevin Holditch

1
Gracias por responder esto ... He estado golpeando mi cabeza contra el escritorio durante la última hora y media averiguando por qué el grunt-bower-concatcomplemento me estaba dando esa salida.
Derek

Gracias por esto. ¡Me estaba volviendo loco!
Michael Giovanni Pumo

16

Acabo de tener este problema. Resuelto quitandogrunt.registerTask('watch', [ 'watch']);


Tenía este nombre / problema exacto. Sheesh…
Steve Meisner

1
Esto lo resolvió para mí, no la respuesta aceptada. Gracias a Dios que hay Stackoverflow y tu respuesta, no encontraría esto en un millón de años: D
Marko Grešak

10

Acabo de corregir un error similar "Proceso recursivo.NextTick detectado" causado por el comando: servidor gruñido

¿La solución? Utilice sudo gruñido servir en su lugar


esta nunca debería ser la solución. sudono debe usarse a menos que sea algo que realmente esté cambiando su sistema. Parece que lo hiciste, lo sudo npm installque a menudo es malo
Eddie Monge Jr


0

Solución alternativa: compruebe si su reloj tiene un argumento de archivo vacío .

Aquí hay un extracto de mi gruntfile

watch: {
  all: {
    options:{
      livereload: true
    },
    files: ['src/scss/*.scss', 'src/foo.html',, 'src/bar.html'],
    tasks: ['default']
  }
}

En mi caso, podría recrear el error del póster original a pedido con el argumento vacío anterior.


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.