tutorial react google closure clojure clojurescript

react - Cómo depurar ClojureScript



clojurescript tutorial (6)

Me disculpo por esta pregunta aparentemente estúpida, pero he estado jugando con ClojureScript de forma intermitente durante algunas semanas, y no puedo entender esta simple pregunta:

¿Cómo depuro ClojureScript?

Así que aquí está el problema:

  1. Escribo mis archivos * .cjs
  2. Ejecuto cljsc / build ...
  3. Cargo mi página web.
  4. Algo malo sucede.
  5. Abro la consola de firefox.
  6. Obtengo una línea en el js generado , lo cual me parece incomprensible, y no tengo idea de de qué línea proviene el archivo cljs original.

Mi pregunta:

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

PD: he mirado ClojureScriptOne: lo que no me gusta es que combina un montón de tecnología a la vez; y preferiría entender cómo usar cada pieza individual por sí sola antes de encadenarla.

Me siento cómodo con ring + mustache + 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 las aplicaciones ClojureScript en estos días es habilitar los mapas de origen: http://github.com/clojure/clojurescript/wiki/Source-maps


Estoy usando piggieback y conecto mi brepl (respuesta de navegador) a mi nrepl.

De esta manera, puede probar el código cljs en su instancia nrepl para obtener comentarios más rápidos. Incluso puede ejecutar algunos scripts cljs dentro de nrepl que hacen cambios a dom. En cuanto al estado de las variables, uso (js / console.log variable) como Hendekagon mencionado. Además, como ha señalado dnolen, si compilas con el modo de depuración (: optimización: espacios en blanco), el javascript generado se vuelve más fácil de entender, por lo que hago puntos de interrupción en el entorno chrome js.

[agregado: 2013-07-18] agregando 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 un fragmento de código debajo de tu código de código secreto.

    (do (require ''cljs.repl.browser) (cemerick.piggieback/cljs-repl :repl-env (doto (cljs.repl.browser/repl-env :port 9000) cljs.repl/-setup)))

  2. luego abre nrepl en emacs (estoy usando Mx nrepl-jack-in)

  3. Ingrese abajo en su nrepl

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

  4. Debe mostrar la página que tiene sus cljs corriendo en su navegador.

  5. pruebe si su nrepl está funcionando correctamente ejecutando a continuación en nrepl. (js / alerta "Estoy listo!")


Mejores prácticas de depuración de ClojureScript (proyecto de ejemplo y tutorial):

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

El ecosistema aún está en proceso de cambio, por lo que espero mantenerlo actualizado con los comentarios de la comunidad para facilitar el proceso a los recién llegados. Actualmente golpea en cuatro de los métodos tradicionales de depuración:

  • Registro : registre de forma fácil y descriptiva el estado de su aplicación
  • Pruebas : pruebe rápidamente su código sin abrir un navegador web
  • Interactuar : juegue con su código mientras se ejecuta en su página web
  • Rastreo - pausa y paso a través del código

Recientemente (27 de octubre de 2013) David Nolen publicó una publicación en el blog que sugiere una excelente configuración para un circuito de retroalimentación ajustado 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 asignado de origen con recompilaciones instantáneas al guardar archivos".

Espero que también pueda ayudar.


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

(repl/connect "http://localhost:9000/repl")

Esto es mucho más que un hack, pero activará el modo de depuración de Chrome.

Sin embargo, recuerde que Clojure Script usa espacios de nombres, lo que significa que si creó algo variable, entonces se encontrará en my.namespace.thing en la consola de Chrome (como se esperaba).



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

Utilice lein-cljsbuild . Puede escribir diferentes compilaciones (pruebas, desarrollo, lanzamiento). Puedes ver los archivos automáticamente para que se vuelvan a compilar rápidamente a medida que los cambies. Puede usar fácilmente la respuesta del navegador para evaluar el código directamente en el navegador. Puede gestionar dependencias.

Específicamente relacionado con su pregunta: lein-cljsbuild también transmite valores predeterminados de advertencia al compilador para que reciba advertencias detalladas y precisas antes de ejecutar el código en el navegador.