Как отлаживать ClojureScript

Я извиняюсь за этот, казалось бы, глупый вопрос, но я играю с включенным и выключенным ClojureScript уже несколько недель, и я не могу понять этот простой вопрос:

How do I debug ClojureScript?

Так вот в чем проблема:

I write my *.cjs files I run cljsc/build ... I load up my webpage. Something bad happens. I open up the firefox console. I get a line in the generated js, which I find incomprehensible, and I have no idea which line of the original cljs file it came from.

My question:

Как правильно разрабатывать приложения ClojureScript?

PS Я смотрел на ClojureScriptOne - что мне не нравится в нем, так это то, что он связывает воедино кучу технологий одновременно; и я предпочел бы понять, как использовать каждыйindividual кусочек сам по себе, прежде чем соединить все вместе.

Мне комфортно с ring + mustache + compojure, [главным образом потому, что я могу использовать свои стандартные методы отладки Clojure], но ClojureScript - еще один зверь.

UPDATE: С тех пор, как этот вопрос впервые был задан, все изменилось. Правильный способ отладки приложений ClojureScript в эти дни состоит в том, чтобы включить исходные карты -http://github.com/clojure/clojurescript/wiki/Source-maps

Ответы на вопрос(6)

Недавно (27 октября 2013 г.) Дэвид Нолен опубликовал пост в блоге, в котором предлагается отличная настройка для тесной обратной связи и хороший опыт отладки с ClojureScript.

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

& quot; Этот короткий пост поможет вам перейти с нуля на разработку исходного кода ClojureScript с мгновенной перекомпиляцией при сохранении файла. & quot;

Надеюсь, что это также может помочь.

Я используюpiggieback и подключите мой brepl (браузер) к моему nrepl.

Таким образом, вы можете проверить свой код cljs на своем экземпляре nrepl, чтобы получить более быструю обратную связь. Вы даже можете выполнить некоторые скрипты cljs в nrepl, который вносит изменения в dom. Что касается состояния переменных, я использую (переменная js / console.log), как упомянул Хендекагон. Кроме того, как указал dnolen, если вы компилируете в режиме отладки (: оптимизация: пробельные символы), сгенерированный javascript станет более понятным, поэтому я делаю точки останова в среде chrome js.

[Добавлено: 2013-07-18] добавление кратких шагов для настройки nrepl-brepl

I setup brepl environment with help of below tutorial. https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md

in short, you'll need below snippet somewhere in your clojurescript code.

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

then open nrepl in emacs(I'm using M-x nrepl-jack-in)

Enter below in your nrepl

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

You need to show the page that has your cljs running on your browser.

test if your nrepl is working correctly by executing below on nrepl. (js/alert "I'm ready!")

UPDATED: Напрямую использовать компилятор теперь просто. Но lein-cljsbuild все еще очень полезен.

использованиеLein-cljsbuild, Вы можете писать разные сборки (тестирование, разработка, выпуск). Вы можете автоматически просматривать файлы, чтобы они быстро перекомпилировались при их изменении. Вы можете легко использовать браузер Repl для оценки кода прямо в браузере. Вы можете управлять зависимостями.

В частности, связанный с вашим вопросом - lein-cljsbuild также передает разумные предупреждения по умолчанию компилятору, чтобы вы получили подробные и точные предупреждения, прежде чем вы фактически запустите код в браузере.

ClojureScript отладкаbest practices (пример проекта и учебник):

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

Экосистема все еще находится в движении, поэтому я надеюсь, что эта информация будет обновляться при участии сообщества, чтобы облегчить процесс для новичков. В настоящее время он использует четыре традиционных метода отладки:

Logging - easily and descriptively log your application state Testing - quickly test your code without opening a web browser Interacting - play with your code while it's running on your web page Tracing - pause and step through code
Решение Вопроса

UPDATE: Я позволил себе сменить первоначальный ответ, поскольку он так печально устарел, и я не могу снять отметку с этого ответа и пометить новый.

Для отладки ClojureScript используйте исходные карты -http://github.com/clojure/clojurescript/wiki/Source-maps

 29 янв. 2014 г., 00:43
благодаря редактору dnolen я все еще зарабатываю очки за этот ответ из-за чистой исторической случайности - ура dnolen!

Если вы хотите использовать Chrome Debugger, вы можете использовать следующее ...

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

(debugger)

это очень много взлома, но он активирует режим отладки chrome.

Помните, что Clojure Script использует пространства имен, что означает, что если вы создали какую-то переменнуюthing, то он будет найден вmy.namespace.thing в хромированной консоли (как и ожидалось).

Ваш ответ на вопрос