2013-10-05 40 views
9

ho cercato di eseguire l'attività orologio grugnito in node.js, ma non funziona per me (questo è quello che ho ottenuto):Grunt Non guardo lavorando

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

Questa è la parte della guardia compito nei 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

Penso che questo aiuterà http://stackoverflow.com/questions/17033246/grunt-uglifym-call-stack-size-exceeded –

risposta

24

u_mulder è corretto; è sufficiente rimuovere la riga non necessaria grunt.registerTask('watch', ['watch']) dal codice e si dovrebbe essere a posto.

Modifica: questo accade perché si sta registrando una nuova attività che chiama se stessa. L'aggiunta di una riga come grunt.registerTask('watch', ['watch']); non ha senso perché è già definita per te. In caso contrario, è necessario chiamare grunt.registerTask per ogni attività nella configurazione di Gruntfile.

In alcuni casi, potrebbe avere senso eseguire l'alias dell'attività con un nome diverso. Sarebbe chiamato con la stessa identica configurazione che hai specificato, ma l'aliasing potrebbe salvare la digitazione. Ad esempio, mi piace registrare il mio available tasks plugin con l'alias 'tasks', quindi invece di digitare grunt availabletasks posso digitare grunt tasks e questo mi consente di risparmiare un po 'di digitazione. In questo caso si potrebbe fare qualcosa di simile:

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

E si può quindi utilizzare grunt w come una scorciatoia per grunt watch.

+0

Questo è lavoro grazie :) – elkebirmed

2

In realtà, l'eliminazione di grunt.registerTask('watch', ['watch']) consentirà di risolvere il problema. Ma lascia che ti aiuti a capire cosa sta succedendo sotto il cofano.

Con grunt.registerTask('watch', ['watch']), watch si chiama da solo, il che genera un ciclo infinito. Quando lo elimini, funziona ancora, perché watch è l'attività predefinita del pacchetto, che suppongo sia chiamata all'inizio del tuo file con grunt.loadNpmTasks('grunt-contrib-watch');. Puoi andare oltre su doc ​​here

Tuttavia, sarebbe davvero utile per ottenere la personalizzazione del compito di orologio per funzionare come si vuole che faccia. Affinché questo accada, sarebbe probabilmente meglio fare qualcosa come grunt.registerTask('watchfiles', ['watch']). Con questo eviti il ​​ciclo infinito e fai in modo che la tua personalizzazione funzioni.

E si dovrebbe eseguire l'attività come questa $ grunt watchfiles e si comporterebbe bene.

Si noti che tutti i percorsi devono essere quelli giusti, altrimenti, se un'attività ha un percorso errato specificato, non verrà eseguito.

+0

Ben, si prega di riprodurre i passaggi e quindi possiamo avere una conversazione. La domanda posta qui non è teorica, è qualcosa che ha bloccato lo sviluppatore nello svolgere il suo compito da grunt. così pratico che è, dovrebbe essere indirizzato 'praticamente' Il tuo commento non aiuta a dare chiarezza al problema. e se si riproduce l'errore si otterrà anche il ciclo infinito. Quindi anche se ho torto, non sarebbe importante perché darai più chiarezza a questa "oscurità" a tutti noi. Grazie! – jgtoriginal

+0

Grazie, ho aggiornato la mia risposta. – Ben

Problemi correlati