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).
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-debug
que 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 paratask
pongo (usandoserve
como ejemplo)grunt serve
o soloserve
? Yo he tratadonode-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 elserve
tarea incluso si pongo undebugger;
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 degrunt
en su comando – en su ejemplo, reemplacetask
conserve
– 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
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
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
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
}
]
}
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 connode --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