Utilizzo di node-inspector con attività Grunt


101

Qualcuno ha usato node-inspector con Grunt per il debug dell'applicazione? In caso contrario, puoi consigliare uno strumento di debug per le app basate su Grunt?

Sto lavorando con nodejs per un'app lato server e ho Grunt per utilizzare attività separate (questo perché gli utenti possono eseguire attività separatamente).


console.log è tuo amico .. Mi piacerebbe accedere a node-inspector, ma penso che gli strumenti di debug non facciano parte della V8. A quanto ho capito, gli strumenti di debug sono un'app Web a sé stante. Correggimi se sbaglio qui perché vorrei fare quello che stai tentando.
iancrowther

Sì, il sistema di registrazione (intendo console.log o altro tipo di meccanismo di registrazione) sarà sempre nostro amico, ma quello di cui ho bisogno è un modo diverso e più debuggabile. Ormai, ho trovato alcuni requisiti mancanti per il mio progetto con grunt, quindi li ho rimossi e sto usando nodejs come proprio, quindi posso eseguire il debug usando node-inspector ora. Lo so, non è la soluzione, ma funziona. Penso che, in futuro, aggiungerò di nuovo grunt con node-inspector e altri strumenti / funzionalità aggiunti. Ultimo ma non meno importante, grugnito è fantastico! Lo sto usando in altri progetti e davvero eccezionale!
JuanO

Ho appena iniziato a giocare con Grunt, anche lui interessato a quella domanda ...
Dmitry Pashkevich

@iancrowther, gli strumenti utilizzati dal web inspector sono nella V8. C'è un progetto chiamato node-inspectorche parla node --debug, fornendo le informazioni di debug a un browser che si connette. È fantastico, perché puoi quindi connettere Chrome al processo node-inspector e utilizzare tutti gli strumenti di web inspector per eseguire il debug della tua app. github.com/dannycoates/node-inspector
David Souther

Risposte:


135

Per eseguire grunt in debug, è necessario passare lo script grunt al nodo in modo esplicito:

node-debug $(which grunt) task

e metti una debugger;linea nel tuo compito. node-inspectoraprirà quindi un browser con strumenti di debug.

Modifica 28 febbraio 2014

node-inspectorha aggiunto il comando node-debug, che avvia il nodo in uno --debugstato e apre il browser al filenode-inspector pagina, fermandosi quando raggiunge la prima debuggerriga o imposta il punto di interruzione.

Modifica 30 gennaio 2015

Su Windows, le cose sono un po 'più complicate. Vedere la risposta da @ e.gluhotorenko per le istruzioni.


1
Questo è fantastico. Funziona anche su altri contenitori npm installati a livello globale.
appuntamento il

1
L'attività di debug del nodo $ (che grugnito) utilizza il debugger predefinito di nodejs
Tomas Romero,

3
Ho un po 'di problemi con questo. Potresti chiarire cos'è $(which grunt)? È solo il Gruntfile.js di cui voglio eseguire il debug? E per tasklo metto (usando servecome esempio) grunt serveo semplicemente serve? Ho provato node-debug Gruntfile.js servee molte altre cose, ma non riesco a farlo funzionare. Node-inspector si apre e si interrompe sulla prima riga, ma non posso interrompere l' serveattività anche se inserisco una debugger;riga come prima riga della funzione.
Brett

2
@brett, sei su Windows o OSX / Linux? Su unix, $ (which grunt) viene sostituito con il percorso completo dello grunt.jsscript grunt-cli . Questo è lo script che esegue effettivamente Grunt. Se sei su Windows, guarda stackoverflow.com/a/13443026/240358 (la risposta sotto questa) per una possibile posizione dello script grunt-cli. Questo prende il posto del grunttuo comando - nel tuo esempio, sostituire taskconserve
David Souther

Grazie @DavidSouther, vuoi aggiungere la parte specifica di Windows alla tua risposta? Dovrei davvero passare a Linux ...
Brett

39

Soluzione Windows

Correre

node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname

da cmd nella directory con il tuo Gruntfile.js. Non dimenticare di mettere la debugger;linea nei posti necessari.


3
A partire da grugnito 0.4 il punto di ingresso grugnito fa parte del grunt-clipacchetto:node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
mistaecko

4
Grazie mille per le istruzioni di Windows. In PowerShell puoi usare la tilde per renderlo un po 'meno fragilenode --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
George Mauer

Amico, ho appena passato 30 minuti a capirlo e ad aggiornare la mia risposta! Avrei dovuto solo scorrere verso il basso!
David Souther

1
Non dimenticare di aprire un'altra console ed eseguirenode-inspector
valter.santos.matos il

@ valter.santos.matos in realtà è ora che dovresti usare il nodo --inspect menzionato di seguito
Jackie

7

Per eseguire il debug, dobbiamo modificare il file grunt sotto bin. Sulla mia macchina, grunt è installato globalmente, quindi sono andato a / usr / local / lib / node_modules / grunt / bin ho aperto il file e ho modificato:

#!/usr/bin/env node

Per

#!/usr/bin/env node --debug-brk

--debug-brk si interromperà sulla prima riga di javascript eseguito.

Farlo da solo non è abbastanza, però, dal momento che non sarai in grado di trovare il tuo file js dell'attività grugnita nel menu a discesa in node inspector, quindi devi modificare il file che ti interessa eseguire il debug aggiungendo debugger;dove vuoi che il punto di interruzione accada. Ora puoi fare clic su Continua dopo la prima interruzione e interrompi la debugger;linea

Piuttosto kludgy, ma è l'unico modo che ho trovato finora.


2
Questo è incredibilmente kludgy, poiché si basa su una varietà di comportamenti in / usr / bin / env e sulla magia non documentata tra # e \ n nella riga di shebang.
David Souther

2
Per me non funziona. Grunt funziona ancora senza la modalità di debug.
Eugene Gluhotorenko

@DavidSouther Shebangs non sono magia non documentata. Sono un comportamento POSIX standardizzato
Miles Rout

6

Recentemente ho creato grunt-node-inspector per configurare facilmente node-inspector con il resto del tuo flusso di lavoro grugnito, dai un'occhiata: https://github.com/ChrisWren/grunt-node-inspector

Ecco una sezione di un Gruntfile che illustra come eseguire il debug di un'attività grunt utilizzando grunt-node-inspector, grunt-concurrent e grunt-shell: https://github.com/CabinJS/Cabin/blob/master/Gruntfile. js # L44-L77


Stai pensando, corri node --debug-brk $(which grunt) node-inspector build testuna cosa? Mi piace.
David Souther

Praticamente, tranne che uso simultaneo, perché node-inspectornon uscirà e non consentirà builde verrà testeseguito poiché funziona per sempre. Ho aggiunto un collegamento a uno snippet in cui l'ho configurato.
ChrisWren

Hmm. Ripensandoci ... il mio flusso di lavoro mi ha appena iniziato node-inspector &, lasciandolo in background e definendolo finito. Qualche tuo pensiero al riguardo?
David Souther

1
Non sono sicuro del perché, ma questo non sembra funzionare per me. Eseguo il comando grunt node-inspectore poi vado all'URL localhost e non vedo alcun file sorgente. Basta svuotare gli strumenti del debugger.
Kris Hollenbeck

Sono riuscito a far apparire il sorgente eseguendo due comandi separati. grunt node-inspectore node --debug-brk Gruntfile.jsdalla mia directory dei grugniti. Tuttavia, quando imposto un punto di interruzione nel file grunt, si blocca semplicemente con un errore di connessione.
Kris Hollenbeck

4

Ho eseguito un'attività per eseguire la mia app e avviare node-inspector. È molto meglio della proposta attuale, devi solo aggiungere questa attività in gruntfile:

  grunt.registerTask('debug', 'My debug task.', function() {
        var done = this.async();
        grunt.util.spawn({
            cmd: 'node',
            args: ['--debug', 'app.js'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('node started');
        grunt.util.spawn({
            cmd: 'node-inspector',
            args: ['&'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('inspector started');
    });

1
L'autore di grunt-node-inspector ha ragione. Questa soluzione funziona solo su ambienti posix mentre il suo è più semplice da configurare node-inspector e con simultaneo, funziona su posix e windows.
Rainabba

3

Ottime risposte qui. Nel 2017, ora puoi farlo

node --inspect --debug-brk $(which grunt) taskName

Che stampa qualcosa di simile.

To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/232652c3-f63c-4b00-8de9-17dfad5db471

Apri quell'URL in Chrome e sei a posto!

Sto usando il nodo 7.3.0 e sono su Mac. Potrebbe essere necessario seguire alcuni dei consigli in altri post per farlo funzionare su Windows.


2

Aggiornamento 2019

  • Se vuoi avviare l'attività grunt in modalità debug e interromperla alla prima riga:

    node --inspect-brk $(which grunt) taskName

  • Se vuoi avviare l'attività grugnito in modalità debug su una porta specifica:

    node --inspect-brk=8080 $(which grunt) taskName

  • se si desidera allegare VSCODE al processo del nodo che esegue la sessione di debug di grunt, utilizzare la seguente configurazione in vscode:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    
    {
      "type": "node",
      "request": "attach",
      "name": "Attach by port IP 5656",
      "port": 8080
    }
  ]
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.