2012-06-12 10 views
27

Przepraszam za tym pozornie głupie pytanie, ale grałem z ClojureScript z przerwami przez kilka tygodni, a ja nie mogę dowiedzieć się, to jedno proste pytanie:Jak debugować ClojureScript

Jak czy debuguję ClojureScript?

Więc tu jest problem:

  1. piszę * .cjs plików
  2. biegnę cljsc/zbudować ...
  3. załadować moją stronę.
  4. Coś złego się dzieje.
  5. Otwieram konsolę firefox.
  6. Otrzymuję wiersz w wygenerowany js, które uważam za niezrozumiałe, i nie mam pojęcia, która linia oryginalnego pliku cljs, z którego pochodzi.

Moje pytanie:

Co to jest właściwa droga do tworzenia aplikacji ClojureScript?

PS Spojrzałem na ClojureScriptOne - nie podoba mi się to, że łączy wszystkie technologie naraz; i wolałbym wiedzieć, jak używać osobno poszczególnych elementów przed połączeniem ich wszystkich razem.

Jestem zadowolony z ring + mustache + compojure, [głównie dlatego, że mogę używać moich standardowych technik debugowania Clojure], ale ClojureScript to kolejna bestia.

AKTUALIZACJA: Rzeczy zmieniły się całkiem sporo, ponieważ to pytanie było zadawane po raz pierwszy. Właściwa droga do debugowania aplikacji ClojureScript te dni jest umożliwienie mapy Source - http://github.com/clojure/clojurescript/wiki/Source-maps

Odpowiedz

18

UPDATE: Wziąłem wolność zmienić oryginalną odpowiedź, ponieważ jest tak żałośnie nieaktualne i nie mogę odznaczyć tę odpowiedź i oznacz nowy.

Aby debugować mapy źródłowe użycie ClojureScript - http://github.com/clojure/clojurescript/wiki/Source-maps

+0

Dzięki edycji dnolen wciąż zdobywam punkty za tę odpowiedź z powodu czystego historycznego wypadku - cheers dnoń! – Hendekagon

26

AKTUALIZACJA: Korzystanie z kompilatora bezpośrednio jest teraz proste. Ale lein-cljsbuild jest nadal bardzo przydatny.

Użyj lein-cljsbuild. Możesz napisać różne kompilacje (testowanie, rozwój, wydanie). Możesz automatycznie oglądać pliki, aby rekompilować je szybko, gdy je zmienisz. Możesz łatwo użyć narzędzia do przeglądania przeglądarki, aby ocenić kod bezpośrednio w przeglądarce. Możesz zarządzać zależnościami.

Związany z twoim pytaniem - lein-cljsbuild przekazuje również domyślne ostrzeżenie dla kompilatora, dzięki czemu otrzymasz szczegółowe i dokładne ostrzeżenia przed uruchomieniem kodu w przeglądarce.

3

Używam piggieback i podłącz mój brepl (replikę przeglądarki) do mojego nrepl.

W ten sposób możesz przetestować swój kod cljs na swojej instancji nrepl, aby uzyskać szybszą informację zwrotną. Można nawet wykonać niektóre skrypty cljs w nrepl, które wprowadzają zmiany w dom. Jeśli chodzi o stan zmiennych, używam (js/console.log zmienna) takiego jak wspomniany Hendekagon. Ponadto, jak zauważył dnolen, jeśli kompilujesz z trybem debugowania (: optymalizacja: biała spacja), wtedy javascript staje się łatwiejszy do zrozumienia, więc robię punkty przerwania w środowisku chrome js.

[dodano: 2013-07-18] dodanie krótkie kroki w celu ustawiania nrepl-brepl

  1. konfiguracji i brepl środowiska poniżej z pomocą podręcznika. https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md

    w skrócie, potrzebujesz poniższego fragmentu gdzieś w swoim kodzie klątwy.

    (repl/connect "http://localhost:9000/repl") 
    
  2. następnie otwarty nrepl w emacs (używam Mx nrepl-jack-in)

  3. Wpisz poniżej w nrepl

    (do 
    (require 'cljs.repl.browser) 
    (cemerick.piggieback/cljs-repl 
        :repl-env 
        (doto (cljs.repl.browser/repl-env :port 9000) 
        cljs.repl/-setup))) 
    
  4. Trzeba pokazać, że strona ma twój cljs uruchomiony w Twojej przeglądarce.

  5. sprawdź, czy twój nrepl działa poprawnie, wykonując poniższe czynności na nrepl. (js/alert „Jestem gotowy!”)

5

niedawno (27 października 2013) David Nolen wydany blogu sugerujące wielką konfigurację dla napięty pętli sprzężenia zwrotnego i dobre doświadczenia debugowania ClojureScript.

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

„Ten krótki post będzie Ci od zera do rozwijania źródło odwzorowane ClojureScript z natychmiastowy recompiles na plik zapisz”.

Nadzieję, że również może pomóc.

4

Jeśli chcesz korzystać z Chrome Debugger, można użyć następujących ...

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

(debugger) 

to jest bardzo dużo hack, ale będzie tryb debugowania aktywnego Chrome.

Pamiętaj jednak, że Clojure Script używa przestrzeni nazw, co oznacza, że ​​jeśli utworzyłeś zmienną thing, zostanie ona znaleziona w my.namespace.thing w konsoli chrome (zgodnie z oczekiwaniami).

5

ClojureScript debugowania najlepsze praktyki (przykładowy projekt & poradnik):

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

Ekosystem jest ciągle w ruchu, więc mam nadzieję utrzymać ten aktualizowana o wkład Wspólnoty w celu ułatwienia proces dla nowo przybyłych.Obecnie uderza na czterech tradycyjnych metod debugowania:

  • Logging - łatwo i opisowo zalogować twój stan aplikacji
  • Testowanie - szybko przetestować swój kod bez otwierania przeglądarki internetowej
  • dotyczący kontaktów - graj z kodem podczas działania na swojej stronie internetowej
  • Śledzenie - zatrzymaj i przejdź przez kod