grunt throw "Processus récursif.nextTick détecté"

88

J'utilise Lion 10.9.2 avec nodejs v0.10.26

Je souhaite configurer une compilation automatisée sur des fichiers sass et un rechargement en direct avec grunt, rien de compliqué mais ...

Lors de l'exécution, grunt watchj'obtiens l'erreur suivante

(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

voici le 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' ]);

};

et voici le 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"
  }
}
denisjacquemin
la source

Réponses:

298

J'ai finalement compris un problème similaire que j'avais avec SASS. J'utilisais

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

Le truc était que Grunt ne semblait pas aimer la répétition des noms. Quand je passe à

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

Tout a fonctionné comme il se doit.

Bob Rockefeller
la source
58
+9000 - c'est un bogue stupide et votre correctif m'a fait gagner du temps en essayant de comprendre. Merci!
jkat98
2
génial, merci de l'avoir repéré. J'ai réalisé que nous n'avons pas besoin d'enregistrer une seule tâche de toute façon, car grunt lancera 'grunt sass' lorsque vous le tapez dans la ligne de commande.
stefan
Merci d'avoir repéré cela, a également rencontré cela et l'erreur n'est pas très utile.
Kevin Holditch
1
Merci d'avoir répondu à ceci ... Je me cogne la tête sur le bureau depuis une heure et demie pour comprendre pourquoi le grunt-bower-concatplugin me donnait cette sortie.
Derek le
Merci pour cela. Ça me rendait fou!
Michael Giovanni Pumo
16

J'ai juste eu ce problème. Résolu le problème en supprimantgrunt.registerTask('watch', [ 'watch']);

Abraham Parangi
la source
J'avais ce nom / problème exact. Sheesh…
Steve Meisner
1
Cela l'a résolu pour moi, pas la réponse acceptée. Dieu merci, il y a Stackoverflow et votre réponse, je ne trouverais pas cela dans un million d'années: D
Marko Grešak
10

Je viens de corriger une erreur similaire "Processus récursif.nextTick détecté" causée par la commande: serveur grunt

La solution? Utilisez plutôt sudo grunt serve

krazyweb
la source
cela ne devrait jamais être la solution. sudone doit pas être utilisé à moins que ce soit quelque chose qui change réellement votre système. On dirait que vous l'avez fait, sudo npm installce qui est souvent mauvais
Eddie Monge Jr
0

Solution alternative: vérifiez votre montre pour un argument de fichier vide .

Voici un extrait de mon gruntfile

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

Dans mon cas, je pourrais recréer l'erreur de l'affiche originale à la demande avec l'argument vide ci-dessus.

Brian Muenzenmeyer
la source