grunt throw „Wykryto proces rekurencyjny.nextTick”

89

Używam Lion 10.9.2 z nodejs v0.10.26

Chcę ustawić automatyczną kompilację na plikach Sass i przeładować na żywo z chrząknięciem, nic skomplikowanego, ale ...

Podczas uruchamiania grunt watchpojawia się następujący błąd

(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

tutaj jest plik 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' ]);

};

a tutaj jest plik 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
źródło

Odpowiedzi:

299

W końcu odkryłem podobny problem, który miałem z SASS. Używałem

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

Rzecz w tym, że Gruntowi nie podobają się powtórzenia w nazwach. Kiedy przełączam się na

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

Wszystko działało tak, jak powinno.

Bob Rockefeller
źródło
58
+9000 - to głupi błąd, a twoja poprawka pozwoliła mi zaoszczędzić czas na próbach rozwiązania. Dzięki!
jkat98
2
super, dzięki, że to zauważyłeś. Zdałem sobie sprawę, że i tak nie musimy rejestrować ani jednego zadania, ponieważ grunt uruchomi „grunt sass”, gdy wpiszesz to w wierszu poleceń.
stefan
Dzięki za to, że to zauważyłeś, też wpadłem na to i błąd nie jest zbyt pomocny.
Kevin Holditch
1
Dziękuję za odpowiedź ... Przez ostatnie półtorej godziny waliłem głową w biurko, zastanawiając się, dlaczego grunt-bower-concatwtyczka daje mi takie wyjście.
Derek,
Dzięki za to. Doprowadzało mnie to do szału!
Michael Giovanni Pumo
17

Właśnie miałem ten problem. Rozwiązano to, usuwającgrunt.registerTask('watch', [ 'watch']);

Abraham Parangi
źródło
Miałem dokładnie taką nazwę / problem. Sheesh…
Steve Meisner
1
To rozwiązało to dla mnie, a nie zaakceptowana odpowiedź. Dzięki Bogu, jest Stackoverflow i twoja odpowiedź, nie znajdę tego za milion lat: D
Marko Grešak
11

Właśnie naprawiłem podobny błąd „Wykryto proces rekurencyjny.nextTick” spowodowany poleceniem: grunt server

Rozwiązanie? Zamiast tego użyj sudo grunt

krazyweb
źródło
to nigdy nie powinno być rozwiązaniem. sudonie powinien być używany, chyba że jest to coś, co faktycznie zmienia twój system. Wygląda na to, że to zrobiłeś, sudo npm installco jest często złe
Eddie Monge Jr
0

Alternatywne rozwiązanie: sprawdź, czy na zegarku nie ma argumentu w postaci pustego pliku .

Oto fragment mojego gruntfile

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

W moim przypadku mogłem odtworzyć na żądanie błąd oryginalnego plakatu z pustym argumentem powyżej.

Brian Muenzenmeyer
źródło