grunt抛出“检测到递归process.nextTick”错误

90

我正在运行 Lion 10.9.2 和 nodejs v0.10.26。

我想要在 grunt 中设置自动编译 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' ]);

};

这里是 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"
  }
}
6个回答

299

我最终解决了一个与SASS有关的类似问题。我在使用

grunt.registerTask('sass', [ 'sass']);
问题在于Grunt似乎不喜欢名称中的重复。当我切换到

时。

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

一切都按照预期运行。


58
+9000 - 这是一个愚蠢的 bug,你的修复节省了我大量时间去寻找解决方法。谢谢! - jkat98
2
太棒了,感谢你发现这个问题。我意识到我们根本不需要注册单个任务,因为当你在命令行中输入“grunt sass”时,Grunt会自动运行它。 - stefan
1
谢谢您的回答...我已经在桌子上砸了一个半小时的头,试图弄清楚为什么grunt-bower-concat插件会给我输出这个结果。 - Derek
在sass下,这个很奇怪的事情对我来说运作正常,但是在watch模式下却出了问题,谢谢。 - Ryan Knell
洛克菲勒?真的吗? :) - Alexandre Bourlier
显示剩余4条评论

17

我遇到了这个问题。通过删除grunt.registerTask('watch', [ 'watch']);来解决它。


我也遇到了这个完全相同的问题/名称。天哪... - Steve Meisner
1
这对我解决了问题,而不是被采纳的答案。感谢上帝有 Stackoverflow 和你的答案,我在一百万年内都找不到这个 :D - Marko Gresak

11

我刚刚修复了一个类似的错误 "检测到递归 process.nextTick ",导致命令:grunt server 出现问题。

解决方案?改用 sudo grunt serve。


这绝不是解决方案。除非真正有改变您的系统的操作,否则不应使用sudo。听起来像是你执行了sudo npm install,这通常是不好的。 - Eddie Monge Jr

1

1

0

替代方案:检查您的手表是否存在空文件参数

这是我的gruntfile的摘录

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

在我的情况下,我可以通过上面的空参数随时重新创建原始帖子的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接