2012-06-12 18 views
27

Ich entschuldige mich für diese scheinbar dumme Frage debuggen, aber ich habe jetzt ein und aus für ein paar Wochen mit ClojureScript gespielt, und ich kann nicht diese einfache Frage herauszufinden:Wie ClojureScript

Wie debugge ich ClojureScript?

So, hier ist das Problem:

  1. ich meine * .cjs Dateien schreiben
  2. I cljsc run/bauen ...
  3. ich meine Webseite laden.
  4. Etwas Schlimmes passiert.
  5. Ich öffne die Firefox-Konsole.
  6. Ich bekomme eine Zeile in der generiert js, die ich unverständlich finde, und ich habe keine Ahnung, aus welcher Zeile der ursprünglichen cljs-Datei es kam.

Meine Frage:

Was ist der richtige Weg ClojureScript Anwendungen zu entwickeln?

PS Ich habe ClojureScriptOne angeschaut - was ich nicht mag ist, dass es eine ganze Reihe von Technologien auf einmal zusammenfügt; und ich würde es vorziehen, zu verstehen, wie man jedes Stück einzeln Stück selbst benutzt, bevor es alles zusammen kettet.

Ich bin zufrieden mit Ring + Schnurrbart + Compojure, [hauptsächlich weil ich meine Standard Clojure Debugging-Techniken verwenden kann] aber ClojureScript ist ein anderes Biest.

UPDATE: Die Dinge haben sich ziemlich geändert, seit diese Frage zuerst gestellt wurde. Der richtige Weg, ClojureScript Anwendungen in diesen Tagen zu debuggen ist Quelle Karten zu ermöglichen - http://github.com/clojure/clojurescript/wiki/Source-maps

Antwort

18

UPDATE: ich mir die Freiheit genommen habe die Antwort zu ändern, da es so jämmerlich veraltet ist, und ich kann diese Antwort nicht demarkieren und markiere einen neuen.

debuggen Verwendung Quelle Karten ClojureScript - http://github.com/clojure/clojurescript/wiki/Source-maps

+0

dank dnolens Bearbeitung, bekomme ich immer noch punkte für diese antwort wegen des rein historischen unfalls - prost dnolen! – Hendekagon

26

AKTUALISIERT: der Compiler direkt verwenden jetzt einfach. Aber lein-cljsbuild ist immer noch sehr nützlich.

Verwenden Sie lein-cljsbuild. Sie können verschiedene Builds schreiben (Testen, Entwickeln, Freigeben). Sie können Dateien automatisch überwachen, sodass sie schnell neu kompiliert werden, wenn Sie sie ändern. Sie können Browser repl verwenden, um Code direkt im Browser auszuwerten. Sie können Abhängigkeiten verwalten.

Speziell auf Ihre Frage bezogen - lein-cljsbuild übergibt auch sinnvolle Warnvorgaben an den Compiler, so dass Sie ausführliche und genaue Warnungen erhalten, bevor Sie den Code tatsächlich im Browser ausführen.

3

Ich benutze piggieback und verbinde meine Brepl (Browser repl) zu meinem nrepl.

Auf diese Weise können Sie Ihren cljs Code auf Ihrer nrepl Instanz testen, um schnelles Feedback. Sie können sogar einige cljs-Skripte innerhalb von nrepl ausführen, die Änderungen an dom vornehmen. Wie für den Status der Variablen verwende ich (js/console.log Variable) wie Hendekagon erwähnt. Auch, wenn dnolen darauf hingewiesen hat, wenn Sie mit Debug-Modus kompilieren (: Optimierung: Leerzeichen), dann wird das generierte Javascript einfacher zu verstehen, also mache ich Breakpoints auf Chrome Js-Umgebung.

[hinzugefügt: 2013.07.18] Hinzufügen kurze Schritte zum Einrichten nrepl-brepl

  1. I Setup brepl Umgebung mit Hilfe von unter Anleitung. https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md

    Kurz gesagt, Sie benötigen unten in Ihrem clojurescript-Code einen Codeausschnitt.

    (repl/connect "http://localhost:9000/repl") 
    
  2. dann offen nrepl in Emacs (Ich bin mit Mx nrepl-Jack-in)

  3. unten in Ihrem nrepl Geben Sie

    (do 
    (require 'cljs.repl.browser) 
    (cemerick.piggieback/cljs-repl 
        :repl-env 
        (doto (cljs.repl.browser/repl-env :port 9000) 
        cljs.repl/-setup))) 
    
  4. Sie müssen die Seite zeigen, dass Hat Ihre Cljs in Ihrem Browser ausgeführt.

  5. Test, wenn Ihr nrepl ordnungsgemäß funktioniert, indem Sie auf nrepl ausführt. (js/alert „Ich bin bereit!“)

5

Vor kurzem (27. Oktober 2013) David Nolen veröffentlicht einen Blog-Post eine große Einrichtung für eine enge Rückkopplungsschleife und eine gute Debugging-Erfahrung mit ClojureScript hindeutet.

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

„Dieser kurze Beitrag erhalten Sie von Null Quelle zu entwickeln abgebildet ClojureScript mit Instant-On-Datei speichern neu kompiliert.“

Hoffe, dass könnte auch helfen.

4

Wenn Sie Chrome Debugger verwenden möchten, können Sie das folgende verwenden ...

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

(debugger) 

dies sehr viel ein Hack, aber es wird aktiv Chrom Debug-Modus.

Denken Sie daran, Clojure Script verwendet Namespaces, was bedeutet, wenn Sie eine Variable thing erstellt haben, dann wird es in my.namespace.thing in der Chrome-Konsole gefunden (wie erwartet).

5

ClojureScript Debuggen Best Practices (Beispielprojekt & Tutorial):

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

Das Ökosystem ist noch im Fluss, so hoffe ich, diese mit Gemeinschafts Eingang zu halten aktualisiert das erleichtern Prozess für Neulinge.Es trifft derzeit auf vier von den traditionellen Methoden der Fehlersuche:

  • Logging - leicht und deskriptiv sich mit Ihrem Anwendungszustand
  • Testing - schnell Ihren Code testen, ohne einen Webbrowser zu öffnen
  • Interacting - spielen Sie mit Ihrem Code, während es auf Ihrer Webseite läuft
  • Tracing - Pause und Schritt durch den Code