бурчання кидає “Виявлено рекурсивний процес.nextTick”


89

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

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

При запуску 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' ]);

};

і ось пакет.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"
  }
}

Відповіді:


299

Нарешті я з’ясував подібну проблему, яку мав із SASS. Я використовував

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

Фокус у тому, що Грунту, схоже, не подобається повторення імен. Коли я переключаюся на

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

Все працювало як слід.


58
+9000 - це дурна помилка, і ваше виправлення заощадило мені час, намагаючись з’ясувати. Дякую!
jkat98

2
приголомшливо, дякую, що помітили це. Я зрозумів, що нам все одно не потрібно реєструвати жодного завдання, оскільки grunt буде запускати 'grunt sass', коли ви введете це в командний рядок.
stefan

Дякуємо, що помітили це, також натрапили на це, і помилка не дуже корисна.
Кевін Холдіч,

1
Дякую, що відповіли на це ... Останні півтори години я бився головою про стіл, з’ясовуючи, чому grunt-bower-concatплагін дає мені такий результат.
Дерек

Дякую за це. Це зводило мене з розуму!
Майкл Джованні Пумо

17

Просто була ця проблема. Вирішили це, видалившиgrunt.registerTask('watch', [ 'watch']);


У мене була така точна назва / проблема. Шиш ...
Стів Мейзнер,

1
Це вирішило це для мене, а не прийняту відповідь. Слава богу, є Stackoverflow і ваша відповідь, я б не знайшов цього через мільйон років: D
Marko Grešak

11

Я щойно виправив подібну помилку "Виявлено рекурсивний процес.nextTick", спричинену командою: grunt server

Рішення? Замість цього використовуйте подачу sudo grunt


це ніколи не повинно бути рішенням. sudoне слід використовувати, якщо це не щось, що насправді змінює вашу систему. Схоже, ви зробили, sudo npm installщо часто буває погано
Едді Монж-молодший



0

Альтернативне рішення: перевірте на годиннику наявність порожнього аргументу файлу .

Ось уривок мого gruntfile

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

У моєму випадку я міг би відтворити помилку оригінального плаката на вимогу, вказавши пустий аргумент вище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.