Configuración de la depuración de JS con IntelliJ / WebStorm y PhantomJS / Casper
¿Puedo obtener un depurador JS interactivo que funcione en PhantomJS y/o CasperJS?
2 answers
PhantomJS tiene una opción remote-debugger-port
que puedes usar para depurar tu script casper en Chrome dev tools. Para usarlo, simplemente ejecute su script casper con este argumento:
casperjs test script.js --remote-debugger-port=9000
Entonces, abre http://localhost:9000 en Chrome y haga clic en el enlace about:blank
que se presenta. A continuación, debe encontrarse en el territorio familiar de Chrome dev tools.
Dado que este es un script y no una página web, para comenzar a depurar, debe hacer una de dos cosas antes de el script se ejecutará:
- En la página Chrome dev tools, abre la consola y ejecuta
__run()
para iniciar tu script. - Inserte una línea
debugger;
en su código, y ejecute su script casper con un argumento adicional--remote-debugger-autorun=yes
. Al hacerlo con la página de depuración remota abierta, se ejecutará el script hasta que llegue a la líneadebugger;
.
Hay un gran tutorial que explica todo esto muy bien.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-14 15:27:48
No resolví esto por completo, pero definitivamente reduje el dolor.
PhantomJS proporciona un argumento de línea de comandos para habilitar el depurador remoto de webkit. AFAIK, PhantomJS lanza un servidor y vuelca el script en el <head>
de una página web con el conocido depurador en el navegador. En realidad es bastante agradable, con puntos de interrupción, etc. Sin embargo, cambiar a indagar manualmente en el terminal para obtener un parámetro de línea de comandos aleatorio y la ruta a su script es serio irritante.
Por lo tanto, He utilizado IntelliJ "herramientas externas" característica para lanzar un script Bash que mata a cualquier sesión de depuración anterior, lanza PhantomJS, y luego abre la página en Chrome.
#!/bin/bash
lsof -i [email protected]:9000 #list anything bound to port 9000
if [ $? -eq 0 ] #if something was listed
then
killall 'phantomjs'
fi
/usr/local/Cellar/phantomjs/2.0.0/bin/phantomjs --remote-debugger-port=9000 $1 &
# --remote-debugger-autorun=yes <- use if you have added 'debugger;' break points
# replace $1 with full path if you don't pass it as a variable.
sleep 2; #give phantomJS time to get started
open -a /Applications/Google\ Chrome.app http://localhost:9000 & #linux has a different 'open' command
# alt URL if you want to skip the page listing
# http://localhost:9000/webkit/inspector/inspector.html?page=1
#see also
#github.com/ariya/phantomjs/wiki/Troubleshooting
Las siguientes líneas son ajustes para IntelliJ, aunque el código anterior funciona igual de bien en cualquier plataforma/IDE.
Programa: $ProjectFileDir$/path/to/bash/script.sh
parámetros: $FilePath$
dirección de trabajo: $ProjectFileDir$
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-02 21:52:11