2013-10-05 152 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,因此,而不是輸入grunt availabletasks,我可以鍵入grunt tasks,這爲我節省了一些打字。在這種情況下,你可以這樣做:

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

然後你就可以使用grunt w作爲grunt watch一個快捷方式。

+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

本,請重現的步驟,然後我們可以有聊天。 這裏提出的問題不是理論上的問題,是阻礙開發人員執行他的咕task任務的原因。 儘可能實用,應該「實際上」處理 您的評論對澄清問題沒有幫助。 如果你重現錯誤,你也會得到無限循環。那麼即使我錯了,這也不是什麼重要的事情,因爲你會更清楚地知道我們這個'黑暗'。謝謝! – jgtoriginal

+0

謝謝,我已經更新了我的答案。 – Ben