グラントスロー「再帰的プロセス.nextTickが検出されました」


88

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

};

そしてここに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"
  }
}

回答:


298

SASSで発生していた同様の問題がようやくわかりました。使っていた

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

トリックは、Gruntが名前の繰り返しを好きではないようだということでした。に切り替えると

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

すべてが正常に機能しました。


58
+9000-これは愚かなバグであり、あなたの修正は私が理解しようとする時間を節約しました。ありがとう!
jkat98 2014年

2
これを見つけてくれてありがとう。コマンドラインに入力するとgruntが「grunt sass」を実行するため、とにかく単一のタスクを登録する必要がないことに気付きました。
ステファン2014

これを見つけてくれてありがとう、またこれに遭遇し、エラーはあまり役に立ちません。
ケビンホールディッチ2014

1
これに答えてくれてありがとう... grunt-bower-concatプラグインがなぜ私にその出力を与えているのかを理解するために、私は過去1時間半頭を机の上で打ちました。
デレク、

これをありがとう。それは私を怒らせました!
Michael Giovanni Pumo 2014

16

ちょうどこの問題がありました。削除することで解決しましたgrunt.registerTask('watch', [ 'watch']);


私はこの正確な名前/問題を持っていました。シーシュ…
スティーブ・マイスナー

1
これは私にとって解決されたものであり、受け入れられた答えではありません。stackoverflowのとあなたの答えがあるの神に感謝し、私は万年でこれを見つけられないでしょう:D
マルコGrešak

10

コマンドによって引き起こされる同様のエラー「再帰的プロセス.nextTickが検出されました」を修正しました。

ソリューション?代わりにsudo grunt serveを使用してください


これは決して解決策ではありません。sudo実際にシステムを変更するものでない限り、使用しないでください。それsudo npm installはよくないことのように聞こえます
Eddie Monge Jr


0

別の解決策:空のファイル引数がないか時計を確認してください

これが私の抜粋です gruntfile

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

私の場合、上記の空の引数を使用して、元のポスターのエラーをオンデマンドで再作成できます。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.