grunt throw «Обнаружен рекурсивный процесс.nextTick»

89

Я запускаю Lion 10.9.2 с nodejs v0.10.26

Я хочу настроить автоматическую компиляцию файлов sass и перезагрузку в реальном времени с grunt, ничего сложного, но ...

При запуске grunt watchя получаю следующую ошибку

(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

вот 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' ]);

};

и вот 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
источник

Ответы:

299

Я наконец выяснил аналогичную проблему, с которой я столкнулся с SASS. Я использовал

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

Уловка заключалась в том, что Гранту, похоже, не нравилось повторение имен. Когда я переключаюсь на

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

Все заработало как надо.

Боб Рокфеллер
источник
58
+9000 - это глупая ошибка, и ваше исправление сэкономило мне время в попытках разобраться. Благодарность!
jkat98
2
здорово, спасибо, что заметили это. Я понял, что нам все равно не нужно регистрировать отдельную задачу, потому что grunt будет запускать grunt sass, когда вы вводите его в командную строку.
Стефан
Спасибо, что заметили это, тоже столкнулся с этим, и ошибка не очень помогает.
Кевин Холдитч
1
Спасибо, что ответили на этот вопрос ... Последние полтора часа я бился головой о стол, пытаясь понять, почему grunt-bower-concatплагин дает мне такой результат.
Дерек
Спасибо за это. Это сводило меня с ума!
Майкл Джованни Пумо
17

Просто была эта проблема. Решил, удаливgrunt.registerTask('watch', [ 'watch']);

Авраам Паранги
источник
У меня было именно это имя / проблема. Sheesh…
Стив Мейснер
1
Это решило это для меня, а не принятый ответ. Слава богу, есть Stackoverflow и ваш ответ, я бы не нашел его через миллион лет: D
Марко Грешак
11

Я только что исправил аналогичную ошибку «Обнаружен рекурсивный процесс.nextTick», вызванную командой: grunt server

Решение? Вместо этого используйте sudo grunt serve

krazyweb
источник
это никогда не должно быть решением. sudoне следует использовать, если это не что-то, что действительно меняет вашу систему. Похоже, вы это сделали, sudo npm installчто часто плохо
Эдди Монж-младший,
0

Альтернативное решение: проверьте на часах пустой аргумент файла .

Вот отрывок из моих gruntfile

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

В моем случае я мог бы по запросу воссоздать исходную ошибку плаката с пустым аргументом выше.

Брайан Мюнзенмейер
источник