2012-06-12 13 views
27

Me disculpo por este aparentemente estúpida pregunta, pero yo he estado jugando con ClojureScript de forma intermitente durante unas pocas semanas, y no puedo averiguar esto una simple pregunta:Cómo depurar ClojureScript

Cómo Cómo depuro ClojureScript?

Así que aquí está el problema:

  1. escribo mi archivos * .cjs
  2. corro cljsc/construcción ...
  3. Cómo cargo mi página web.
  4. Algo malo sucede.
  5. Abro la consola de Firefox.
  6. Obtengo una línea en el generado js, que me parece incomprensible, y no tengo idea de qué línea del archivo cljs original proviene.

Mi pregunta:

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

PD He visto 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í misma antes de encadenarlo todo.

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

ACTUALIZACIÓN: Las cosas han cambiado bastante desde que se hizo esta pregunta por primera vez. La forma adecuada para depurar aplicaciones ClojureScript estos días es permitir a los mapas de código fuente - http://github.com/clojure/clojurescript/wiki/Source-maps

Respuesta

18

ACTUALIZACIÓN: Me he tomado la libertad de cambiar la respuesta original, ya que es tan terriblemente fuera de fecha y no puedo desmarcar esta respuesta y marca una nueva.

para depurar mapas fuente utilización ClojureScript - http://github.com/clojure/clojurescript/wiki/Source-maps

+0

Gracias a la edición de dnolen, sigo ganando puntos por esta respuesta debido a un accidente histórico puro. ¡Salud! ¡Dnolen! – Hendekagon

26

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

Use lein-cljsbuild. Puede escribir compilaciones diferentes (prueba, desarrollo, lanzamiento). Puede ver automáticamente los archivos para que se vuelvan a compilar rápidamente a medida que los cambia. Puede usar fácilmente el navegador repl para evaluar el código directamente en el navegador. Puede administrar dependencias.

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

3

Estoy usando piggieback y conecto mi brepl (navegador alternativo) 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, uso (js/console.log variable) como mencionó Hendekagon. Además, como dnolen ha señalado, si compila con el modo de depuración (: optimización: espacios en blanco), entonces javascript generado se vuelve más fácil de entender, por lo que hago puntos de interrupción en el entorno chrome js.

[añadido: 18.07.2013] añadiendo breves pasos para configurar nrepl-brepl

  1. I entorno de configuración brepl con ayuda de abajo tutorial. https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md

    en pocas palabras, necesitará el siguiente fragmento en algún lugar de su código de clojurescript.

    (repl/connect "http://localhost:9000/repl") 
    
  2. nrepl entonces abierta en emacs (estoy usando Mx nrepl-Jack-in)

  3. Escriba 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. Tiene que mostrar la página que tiene tus cljs ejecutándose en tu navegador.

  5. prueba si su nrepl funciona correctamente ejecutando a continuación en nrepl. (js/alerta "Estoy listo!")

5

Recientemente (27 de octubre de 2013) David Nolen lanzado un blog que sugiere una gran disposición para un circuito 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 fuente correlacionada con ClojureScript instantánea vuelve a compilar el archivo de salvar."

Espero que también pueda ayudar.

4

Si desea utilizar Chrome depurador, puede utilizar el siguiente ...

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

(debugger) 

esto es en gran medida un corte, pero será el modo de depuración de cromo activa.

Recuerde, Clojure Script utiliza espacios de nombres, lo que significa que si creó alguna variable thing, entonces se encontrará en my.namespace.thing en la consola de Chrome (como se esperaba).

5

ClojureScript depuración mejores prácticas (ejemplo de proyecto & tutorial):

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

El ecosistema está aún en proceso de cambio, así que espero mantener esta actualizado con información de la comunidad para facilitar la proceso para los recién llegados.En la actualidad realiza en cuatro de los métodos tradicionales de depuración:

  • registro - con facilidad y de forma descriptiva registrar su estado de la aplicación
  • Prueba - probar rápidamente su código sin necesidad de 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