Uso del inspector de nodos con tareas de Grunt

8 minutos de lectura

avatar de usuario
JuanO

¿Alguien usó inspector de nodos con Gruñido para la depuración de aplicaciones? Si no, ¿puede recomendar una herramienta de depuración para aplicaciones basadas en Grunt?

estoy trabajando con nodos para una aplicación del lado del servidor y tengo Gruñido usar tareas separadas (esto se debe a que los usuarios pueden ejecutar tareas por separado).

  • console.log es tu amigo. Me encantaría acceder al inspector de nodos, pero creo que las herramientas de depuración no son parte de V8. Según tengo entendido, las herramientas de depuración son una aplicación web por derecho propio. Corrígeme si me equivoco aquí porque me gustaría hacer lo que intentas.

    – iancrowther

    5 de septiembre de 2012 a las 14:11


  • Sí, el sistema de registro (me refiero a console.log u otro tipo de mecanismo de registro) siempre será nuestro amigo, pero lo que necesito es una forma diferente y más depurable. A estas alturas, encontré algunos requisitos faltantes para mi proyecto con grunt, así que ya los eliminé y estoy usando nodejs como propio para poder depurar usando el inspector de nodos ahora. Lo sé, no es la solución, pero funciona. Creo que, en un futuro, agregaré gruñido nuevamente con el inspector de nodos y otras herramientas/características agregadas. Por último, pero no menos importante, ¡grunt es increíble! ¡Lo estoy usando en otros proyectos y realmente es genial!

    – JuanO

    5 sep 2012 a las 20:39


  • Acabo de empezar a jugar con Grunt, también interesado en esa pregunta…

    – Dmitri Pashkévich

    13 de septiembre de 2012 a las 14:56

  • @iancrowther, las herramientas que usa el inspector web están en V8. Hay un proyecto llamado node-inspector que habla con node --debug, proporcionando la información de depuración a un navegador que se conecta. Esto es increíble, porque luego puede conectar Chrome al proceso del inspector de nodos y usar todas las herramientas del inspector web para depurar su aplicación. github.com/dannycoates/node-inspector

    – David Sur

    5 de octubre de 2012 a las 3:52

avatar de usuario
david sur

Para ejecutar grunt en la depuración, debe pasar el script grunt al nodo explícitamente:

node-debug $(which grunt) task

y poner un debugger; línea en su tarea. node-inspector luego abrirá un navegador con herramientas de depuración.

Editar 28 de febrero de 2014

node-inspector ha añadido el comando node-debugque lanza el nodo en un --debug Estado y abre el navegador a la node-inspector página, deteniéndose cuando llega a la primera debugger línea o establecer un punto de interrupción.

Editar 30 de enero de 2015

En Windows, las cosas son un poco más complicadas. Consulte la respuesta de @e.gluhotorenko para obtener instrucciones.

  • Esto es genial. También funciona en otros contenedores npm instalados globalmente.

    – por favor

    30 de enero de 2014 a las 15:40

  • la tarea de depuración de nodo $ (que gruñido) usa el depurador predeterminado de nodejs

    – Tomás Romero

    25 de febrero de 2014 a las 19:06

  • Estoy teniendo un pequeño problema con esto. ¿Podrías aclarar qué $(which grunt) ¿es? ¿Es solo Gruntfile.js lo que quiero depurar? Y para task pongo (usando serve como ejemplo) grunt serve o solo serve? Yo he tratado node-debug Gruntfile.js serve y muchas otras cosas, pero simplemente no puedo hacer que esto funcione. Node-inspector se abre y se rompe en la primera línea, pero no puedo entrar en el serve tarea incluso si pongo un debugger; line como la primera línea de la función.

    – Brett

    10 de marzo de 2014 a las 6:08

  • @brett, ¿está en Windows o en OSX/Linux? En Unix, $(que gruñido) se reemplaza con la ruta completa al gruñido-cli grunt.js guion. Ese es el script que realmente ejecuta Grunt. Si está en Windows, mire stackoverflow.com/a/13443026/240358 (la respuesta debajo de esto) para una posible ubicación del script grunt-cli. Eso toma el lugar de grunt en su comando – en su ejemplo, reemplace task con serve

    – David Sur

    10 de marzo de 2014 a las 16:26

  • Gracias @DavidSouther, ¿quieres agregar la parte específica de Windows a tu respuesta? Realmente debería hacer el cambio a Linux…

    – Brett

    11 de marzo de 2014 a las 1:26

avatar de usuario
Eugene Gluhotorenko

solución de Windows

Correr

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

de cmd en el directorio con su Gruntfile.js. No olvides poner debugger; línea en los lugares necesarios.

  • Comenzando con grunt 0.4, el punto de entrada de grunt es parte del grunt-cli paquete: node --debug-brk [..]\node_modules\grunt-cli\bin\grunt

    – mistaecko

    20 de marzo de 2013 a las 6:35

  • Muchas gracias por las instrucciones de Windows. En powershell puedes usar la tilde para hacer esto un poco menos frágil node --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname

    -George Mauer

    19 de enero de 2014 a las 21:54


  • ¡Hombre, acabo de pasar 30 minutos resolviendo esto y luego actualizando mi respuesta! ¡Debería haberme desplazado hacia abajo!

    – David Sur

    30 de enero de 2015 a las 20:25

  • No olvides abrir otra consola y ejecutar node-inspector

    – valter.santos.matos

    5 de agosto de 2015 a las 7:36

  • @valter.santos.matos en realidad ahora debe usar el nodo –inspect mencionado a continuación

    – Jackie

    28 de junio de 2017 a las 14:53

Para depurar, tenemos que modificar el archivo grunt en bin. En mi máquina, grunt está instalado globalmente, así que fui a /usr/local/lib/node_modules/grunt/bin, abrí el archivo y lo modifiqué:

#!/usr/bin/env node

A

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

–debug-brk se interrumpirá en la primera línea de javascript ejecutado.

Sin embargo, hacer eso solo no es suficiente, ya que no podrá encontrar el archivo js de la tarea grunt en el menú desplegable del inspector de nodos, por lo que debe modificar el archivo que le interesa depurar agregando debugger; donde desea que suceda el punto de interrupción. Ahora puede hacer clic en continuar después del primer descanso, y se interrumpirá en su debugger; línea

Bastante confuso, pero es la única forma que he encontrado hasta ahora.

  • Esto es increíblemente confuso, ya que se basa en una variedad de comportamientos en /usr/bin/env y magia no documentada entre # y \n en la línea shebang.

    – David Sur

    5 de octubre de 2012 a las 3:49

  • No funciona para mí. Grunt todavía se ejecuta sin modo de depuración.

    – Eugenio Gluhotorenko

    17 de noviembre de 2012 a las 15:46


  • @DavidSouther Shebangs no son magia indocumentada. Son comportamiento POSIX estandarizado

    – Ruta Millas

    3 sep 2017 a las 23:53

avatar de usuario
ChrisWren

Recientemente creé grunt-node-inspector para configurar fácilmente el inspector de nodos con el resto de su flujo de trabajo grunt, compruébelo: https://github.com/ChrisWren/grunt-nodo-inspector

Aquí hay una sección de un Gruntfile que ilustra cómo puede depurar una tarea grunt usando grunt-node-inspector, grunt-concurrent y grunt-shell: https://github.com/CabinJS/Cabin/blob/master/Gruntfile.js#L44-L77

Realicé una tarea para ejecutar mi aplicación e iniciar el inspector de nodos. Es mucho mejor que la propuesta actual, solo tiene que agregar esta tarea en 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');
    });

  • El autor de grunt-node-inspector tiene razón. Esta solución solo funciona en entornos posix, mientras que la suya es más fácil de configurar, node-inspector y concurrente, funciona en posix y windows.

    – lluviaabba

    14 de diciembre de 2013 a las 4:58

Grandes respuestas aquí. En 2017, ahora puedes hacer

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

Que imprime algo como.

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

Abre esa URL en Chrome, ¡y listo!

Estoy usando Node 7.3.0 y estoy en Mac. Es posible que deba seguir algunos de los consejos en otras publicaciones para que funcione en Windows.

  • El autor de grunt-node-inspector tiene razón. Esta solución solo funciona en entornos posix, mientras que la suya es más fácil de configurar, node-inspector y concurrente, funciona en posix y windows.

    – lluviaabba

    14 de diciembre de 2013 a las 4:58

avatar de usuario
Comunidad

actualización 2019

  • Si desea iniciar la tarea grunt en modo de depuración y romper en la primera línea:

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

  • Si desea iniciar la tarea grunt en modo de depuración en un puerto específico:

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

  • si desea adjuntar VSCODE al proceso de nodo que ejecuta la sesión de depuración de grunt, use la siguiente configuración en 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
    }
  ]
}

¿Ha sido útil esta solución?