Cómo depurar ClojureScript


Me disculpo por esta pregunta aparentemente estúpida, pero he estado jugando con ClojureScript de vez en cuando durante unas semanas, y no puedo entender esta simple pregunta:

¿Cómo depuro ClojureScript?

Así que aquí está el problema:

  1. escribo mi *.cjs files
  2. Corro cljsc/build ...
  3. Cargo mi página web.
  4. Algo malo sucede.
  5. Abro la consola de firefox.
  6. Tengo una línea en el generado js, que encuentro incomprensible, y no tengo idea de qué línea del archivo cljs original vino.

Mi pregunta:

¿Cuál es la forma correcta de desarrollar aplicaciones ClojureScript?

PS He mirado ClojureScriptOne what lo que no me gusta de él es que encadena un montón de tecnología a la vez; y preferiría entender cómo usar cada pieza individual por su cuenta antes de encadenarlo todo junto.

Me siento cómodo con ring + moustache + compojure, [principalmente porque puedo usar mis técnicas de depuración de Clojure estándar] pero ClojureScript es otra bestia.

ACTUALIZACIÓN : Las cosas han cambiado bastante desde que se hizo esta pregunta por primera vez. La forma correcta de depurar aplicaciones ClojureScript en estos días es habilitar mapas de origen - http://github.com/clojure/clojurescript/wiki/Source-maps

Author: dnolen, 2012-06-12

6 answers

ACTUALIZACIÓN: Me he tomado la libertad de cambiar la respuesta original ya que está muy desactualizada y no puedo desmarcar esta respuesta y marcar una nueva.

Para depurar ClojureScript use mapas de origen - http://github.com/clojure/clojurescript/wiki/Source-maps

 18
Author: Hendekagon,
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
2013-12-04 16:36:29

ACTUALIZADO: Usar el compilador directamente ahora es sencillo. Pero lein-cljsbuild sigue siendo muy útil.

Use lein-cljsbuild. Puedes escribir diferentes compilaciones (testing, development, release). Puede ver automáticamente los archivos para que se recompilen rápidamente a medida que los cambia. Puede utilizar fácilmente browser repl para evaluar el código directamente en el navegador. Puede administrar dependencias.

Específicamente relacionado con su pregunta-lein-cljsbuild también pasa a lo largo de advertencia sensible por defecto el compilador para que obtenga advertencias detalladas y precisas antes de ejecutar el código en el navegador.

 26
Author: dnolen,
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-05-22 13:43:49

Recientemente (Oct. 27 de 2013) David Nolen publicó una entrada de blog que sugiere una gran configuración para un bucle de retroalimentación apretado y una buena experiencia de depuración con ClojureScript.

Http://swannodette.github.io/2013/10/27/the-essence-of-clojurescript /

"Este breve post te llevará de cero a desarrollar ClojureScript mapeado de código fuente con recompilas instantáneas en el archivo guardado."

Espero que eso también pueda ayudar.

 6
Author: leontalbot,
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
2013-10-28 15:35:23

ClojureScript debugging mejores prácticas (ejemplo de proyecto y tutorial):

Https://github.com/shaunlebron/How-To-Debug-CLJS

El ecosistema todavía está en proceso de cambio, así que espero mantener esto actualizado con las aportaciones de la comunidad para facilitar el proceso para los recién llegados. Actualmente golpea en cuatro de los métodos tradicionales de depuración:

  • Logging - registra fácil y descriptivamente el estado de tu aplicación
  • Probando - rápidamente pruebe su código sin abrir un navegador web
  • Interactuando - juega con tu código mientras se ejecuta en tu página web
  • Tracing - pausa y paso a través del código
 6
Author: Shaun Lebron,
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
2014-04-14 20:41:34

Si desea utilizar Chrome Debugger, puede utilizar lo siguiente...

(defn debugger []
  (js/eval "debugger"))

(debugger)

Esto es en gran medida un truco, pero se activa el modo de depuración de Chrome.

Recuerde, sin embargo, el script Clojure utiliza espacios de nombres, lo que significa que si creó alguna variable thing, entonces se encontrará en my.namespace.thing en chrome console (como se esperaba).

 5
Author: film42,
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
2016-04-07 14:11:30

Estoy usando piggieback y conectar mi brepl(browser repl) a mi nrepl.

De esta manera, puede probar su código cljs en su instancia nrepl para obtener comentarios más rápidos. Incluso puede ejecutar algunos scripts cljs dentro de nrepl que realiza cambios en dom. En cuanto al estado de las variables, utilizo (js / console.log variable) como Hendekagon mencionado. Además, como dnolen ha señalado, si compila con el modo de depuración (: optimization: whitespace), entonces el javascript generado se vuelve más fácil de entender, así que hago puntos de interrupción en Chrome js entorno.

[añadido:2013-07-18] añadir pasos breves para configurar nrepl-brepl

  1. Configuré el entorno brepl con la ayuda del siguiente tutorial. https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md

    En resumen, necesitarás el siguiente fragmento en algún lugar de tu código clojurescript.

    (repl/connect "http://localhost:9000/repl")
    
  2. Luego abra nrepl en emacs (estoy usando M-x nrepl-jack-in)

  3. Ingrese a continuación en su nrepl

    (do
     (require 'cljs.repl.browser)
     (cemerick.piggieback/cljs-repl
       :repl-env
       (doto (cljs.repl.browser/repl-env :port 9000)
         cljs.repl/-setup)))
    
  4. Debe mostrar la página que tiene su cljs ejecutándose en su navegador.

  5. Pruebe si su nrepl está funcionando correctamente ejecutando abajo en nrepl. (js / alerta " Estoy listo!")

 4
Author: ktsujister,
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
2014-03-03 01:27:16