2013-10-05 14 views
9

を働いていないウォッチ:うなり声は、(これは私が得たものである)私はNode.jsの中でうなり声によって時計のタスクを実行しようとしたが、それは私のために動作しません

$ grunt watch 
warning: Maximum call stack size exceeded Use --force to continue. 

これは時計の一部でありますGruntfile.jsのタスク:

watch: { 
    less: { 
    files: 'src/less/*.less', 
    tasks: ['clean', 'recess', 'copy'] 
    }, 
    js: { 
    files: 'src/js/*.js', 
    tasks: ['clean', 'jshint', 'concat', 'uglify', 'copy'] 
    }, 
    theme: { 
    files: 'src/theme/**', 
    tasks: ['clean', 'recess', 'copy'] 
    }, 
    images: { 
    files: 'src/images/*', 
    tasks: ['clean', 'recess', 'copy'] 
    } 
} 

grunt.loadNpmTasks('grunt-contrib-watch'); 

grunt.registerTask('watch', ['watch']); 
+1

私はこれが役立つと思うhttp://stackoverflow.com/questions/17033246/grunt-uglifym-call-stack-size-exceeded –

答えて

24

u_mulderが正しいです。あなたのコードから不要なgrunt.registerTask('watch', ['watch'])行を削除するだけでよいでしょう。

編集:これは、自分自身を呼び出す新しいタスクを登録しているために発生します。 grunt.registerTask('watch', ['watch']);のような行を追加することは、すでに定義されているため意味がありません。これが当てはまらない場合は、Gruntfile設定の各タスクごとにgrunt.registerTaskに電話する必要があります。

場合によっては、タスクを別名でエイリアスすることもできます。指定したのとまったく同じ設定で呼び出されますが、エイリアシングを行うと入力を省くことができます。たとえば、私はavailable tasks pluginを 'tasks'エイリアスに登録したいので、grunt availabletasksと入力するのではなく、grunt tasksと入力すれば入力を省くことができます。この例では、あなたのような何かを行うことができます:

grunt.registerTask('w', ['watch']); 

をそして、あなたはその後、grunt watchためのショートカットとしてgrunt wを使用することができます。

+0

それはあなたに感謝の仕事です:) – elkebirmed

2

実際には、grunt.registerTask('watch', ['watch'])を削除すると削除されます。 しかし、私はボンネットの下で何が起こっているのか理解するのを手伝いましょう。

grunt.registerTask('watch', ['watch'])の場合、watchはそれ自身を呼び出しており、無限ループを生成します。 それを削除すると、それはまだ動作します。watchは、パッケージのデフォルトタスクです。grunt.loadNpmTasks('grunt-contrib-watch');というファイルが非常に目立っています。さらに進んでください。here

ただし、ウォッチタスクのカスタマイズを希望通りに行うには、本当に便利です。これが起こるには、おそらくgrunt.registerTask('watchfiles', ['watch'])のようなことをする方が良いでしょう。これにより、無限ループを回避し、カスタマイズを行うことができます。

このようなタスクを実行すると、$ grunt watchfilesとなり、うまくいくはずです。

すべてのパスが正しいパスでなければならないことに注意してください。そうでない場合は、タスクのパスが誤って指定されていると、実行されません。

+0

ベン、ステップを再現してくださいチャット。 ここで質問される質問は、理論的なものではなく、開発者が不平等な作業を実行するのを妨げているものです。 実際には現実的に対応されるべきである。 あなたのコメントは、問題を明確にするのに役立たない。 エラーを再現すると、エンドレスループも発生します。それで私が間違っていても、この「暗闇」を私たち全員にもっと明快に伝えることは重要ではありません。どうも! – jgtoriginal

+0

ありがとう、私は私の答えを更新しました。 – Ben

関連する問題