Grunzwurf "Rekursiver process.nextTick erkannt"

88

Ich verwende Lion 10.9.2 mit nodejs v0.10.26

Ich möchte eine automatisierte Kompilierung für Sass-Dateien und ein Live-Reload mit Grunzen einrichten, nichts Kompliziertes, aber ...

Beim Ausführen wird grunt watchfolgende Fehlermeldung angezeigt

(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

Hier ist die 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' ]);

};

und hier ist die 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
quelle

Antworten:

298

Ich fand schließlich ein ähnliches Problem heraus, das ich mit SASS hatte. Ich habe benutzt

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

Der Trick war, dass Grunt die Wiederholung von Namen nicht zu mögen scheint. Wenn ich zu wechsle

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

Alles hat so funktioniert, wie es sollte.

Bob Rockefeller
quelle
58
+9000 - Dies ist ein dummer Fehler, und Ihr Fix hat mir Zeit gespart, um es herauszufinden. Vielen Dank!
jkat98
2
Super, danke, dass du das entdeckt hast. Mir wurde klar, dass wir sowieso keine einzige Aufgabe registrieren müssen, da grunt 'grunt sass' ausführt, wenn Sie dies in die Befehlszeile eingeben.
Stefan
Vielen Dank für das Erkennen, auch darauf gestoßen und der Fehler ist nicht sehr hilfreich.
Kevin Holditch
1
Vielen Dank, dass Sie darauf geantwortet haben ... Ich habe in den letzten anderthalb Stunden meinen Kopf auf den Schreibtisch geschlagen und herausgefunden, warum das grunt-bower-concatPlugin mir diese Ausgabe gegeben hat.
Derek
Danke dafür. Es hat mich verrückt gemacht!
Michael Giovanni Pumo
16

Hatte gerade dieses Problem. Es wurde durch Entfernen behobengrunt.registerTask('watch', [ 'watch']);

Abraham Parangi
quelle
Ich hatte genau diesen Namen / dieses Problem. Meine Güte ...
Steve Meisner
1
Dies löste es für mich, nicht die akzeptierte Antwort. Gott sei Dank gibt es Stackoverflow und Ihre Antwort, ich würde dies in einer Million Jahren nicht finden: D
Marko Grešak
10

Ich habe gerade einen ähnlichen Fehler "Recursive process.nextTick erkannt" behoben, der durch den folgenden Befehl verursacht wurde: grunt server

Die Lösung? Verwenden Sie stattdessen Sudo Grunt Serve

Krazyweb
quelle
Dies sollte niemals die Lösung sein. sudosollte nicht verwendet werden, es sei denn, es ist etwas, das Ihr System tatsächlich verändert. Es klingt wie Sie, sudo npm installwas oft schlecht ist
Eddie Monge Jr
0

Alternative Lösung: Überprüfen Sie Ihre Uhr auf ein leeres Dateiargument .

Hier ist ein Auszug von mir gruntfile

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

In meinem Fall könnte ich den Fehler des Originalplakats bei Bedarf mit dem obigen leeren Argument neu erstellen.

Brian Muenzenmeyer
quelle