【问题标题】:grunt throw "Recursive process.nextTick detected"咕噜声抛出“检测到递归 process.nextTick”
【发布时间】:2014-04-12 17:11:52
【问题描述】:

我正在使用 nodejs v0.10.26 运行 Lion 10.9.2

我想在 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"
  }
}

【问题讨论】:

    标签: node.js gruntjs grunt-contrib-watch


    【解决方案1】:

    我什至在尝试安装 grunt 时都遇到了错误。运行 npm dedupe 解决了我的问题,如下所示:Grunt watch error - Waiting...Fatal error: watch ENOSPC

    【讨论】:

      【解决方案2】:

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

      这是我gruntfile的摘录

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

      就我而言,我可以使用上面的空参数按需重新创建原始海报的错误。

      【讨论】:

        【解决方案3】:

        你可以试试这个,它为我解决了这个问题,使用 Yeoman 1.3.3 和 Ubuntu 14.04 Grunt watch error - Waiting...Fatal error: watch ENOSPC

        【讨论】:

          【解决方案4】:

          我刚刚修复了由命令引起的类似错误“检测到递归 process.nextTick”:grunt server

          解决方案?改用 sudo grunt serve

          【讨论】:

          • 这不应该是解决方案。 sudo 不应该被使用,除非它实际上改变了你的系统。听起来你做了sudo npm install 这通常很糟糕
          【解决方案5】:

          我终于发现了我在使用 SASS 时遇到的类似问题。我正在使用

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

          诀窍在于 Grunt 似乎不喜欢名字的重复。当我切换到

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

          一切正常。

          【讨论】:

          • +9000 - 这是一个愚蠢的错误,您的修复为我节省了尝试找出答案的时间。谢谢!
          • 太棒了,感谢您发现这一点。我意识到无论如何我们都不需要注册单个任务,因为当您在命令行中键入时,grunt 将运行“grunt sass”。
          • 感谢您发现这个问题,也遇到了这个问题,这个错误不是很有帮助。
          • 感谢您回答这个问题...在过去的一个半小时里,我一直在敲桌子,想弄清楚为什么 grunt-bower-concat 插件会给我这样的输出。
          • 谢谢。这让我发疯了!
          【解决方案6】:

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

          【讨论】:

          • 我有这个确切的名称/问题。嘘……
          • 这为我解决了这个问题,而不是接受的答案。感谢上帝,有 Stackoverflow 和你的答案,我在一百万年内找不到这个:D
          猜你喜欢
          • 1970-01-01
          • 2020-03-11
          • 2014-05-03
          • 1970-01-01
          • 2015-05-25
          • 1970-01-01
          • 1970-01-01
          • 2015-04-13
          • 2013-03-15
          相关资源
          最近更新 更多