Как отладить ClojureScript
Я извиняюсь за этот, казалось бы, глупый вопрос, но сейчас я играю с ClojureScript в течение нескольких недель, и я не могу понять этот простой вопрос:
Как отлаживать ClojureScript?
Итак, вот проблема:
- Я пишу файлы *.cjs
- Я запускаю cljsc/build...
- Загружаю свою веб-страницу.
- Что-то плохое происходит.
- Я открываю консоль firefox.
- Я получаю строку в сгенерированном js, который я нахожу непонятным, и я понятия не имею, к какой строке исходного файла cljs он пришел.
Мой вопрос:
Каков правильный способ разработки приложений ClojureScript?
PS Я посмотрел на ClojureScriptOne - мне не нравится, что он объединяет вместе множество технологий; и я предпочел бы понять, как использовать каждую отдельную деталь самостоятельно, прежде чем соединять все это вместе.
Мне комфортно с кольцом + усы + compojure, [главным образом, потому что я могу использовать стандартные методы отладки Clojure], но ClojureScript - еще один зверь.
ОБНОВЛЕНИЕ. Все изменилось совсем немного, так как этот вопрос был впервые задан. Правильный способ отладки приложений ClojureScript в наши дни - включить исходные карты - http://github.com/clojure/clojurescript/wiki/Source-maps
Ответы
Ответ 1
ОБНОВЛЕНИЕ: Я взял на себя смелость изменить исходный ответ, так как он настолько устарел, и я не могу отменить этот ответ и отметить новый.
Чтобы отладить ClojureScript, используйте исходные карты - http://github.com/clojure/clojurescript/wiki/Source-maps
Ответ 2
ОБНОВЛЕНО. Использование компилятора прямо сейчас прямо. Но lein-cljsbuild все еще очень полезен.
Используйте lein-cljsbuild. Вы можете писать разные сборки (тестирование, разработка, выпуск). Вы можете автоматически просматривать файлы, чтобы они быстро перекомпилировались по мере их изменения. Вы можете легко использовать реплика браузера для оценки кода непосредственно в браузере. Вы можете управлять зависимостями.
В частности, связанный с вашим вопросом - lein-cljsbuild также проходит по разумным предупреждениям по умолчанию для компилятора, чтобы вы получали подробные и точные предупреждения, прежде чем выполнять код в браузере.
Ответ 3
Недавно (27 октября 2013 г.) Дэвид Нолен опубликовал сообщение в блоге, предлагающее отличную установку для жесткой обратной связи и хороший отладочный опыт с ClojureScript.
http://swannodette.github.io/2013/10/27/the-essence-of-clojurescript/
"Эта короткая публикация даст вам от нуля до разработки исходного кода ClojureScript с мгновенными перекомпиляциями при сохранении файла."
Надеюсь, что это тоже поможет.
Ответ 4
Отладка ClojureScript лучшие практики (пример проекта и учебника):
https://github.com/shaunlebron/How-To-Debug-CLJS
Экосистема все еще находится в движении, поэтому я надеюсь сохранить это обновление с помощью сообщества, чтобы облегчить процесс для новичков. В настоящее время он использует четыре традиционных метода отладки:
- Запись - легко и описательно регистрировать состояние вашего приложения.
- Тестирование - быстро протестируйте свой код без открытия веб-браузера.
- Взаимодействие - играйте с кодом во время работы на своей веб-странице.
- Трассировка - пауза и переход по коду
Ответ 5
Если вы хотите использовать Отладчик Chrome, вы можете использовать следующее...
(defn debugger []
(js/eval "debugger"))
(debugger)
это очень хак, но он будет активным режимом отладки хрома.
Помните, однако, что Clojure Script использует пространства имен, а это означает, что если вы создали некоторую переменную thing
, то она будет найдена в my.namespace.thing
в хром-консоли (как и ожидалось).
Ответ 6
Я использую piggieback и подключаю мой brepl (браузерный ответ) к моему nrepl.
Таким образом, вы можете протестировать свой код cljs на своем экземпляре nrepl, чтобы получить более быструю обратную связь.
Вы даже можете выполнить некоторые скрипты cljs в nrepl, которые вносят изменения в dom.
Что касается состояния переменных, я использую (переменную js/console.log), как упоминал Хендекагон.
Кроме того, как отметил dnolen, если вы компилируете в режиме отладки (: optimization: whitespace), то сгенерированный javascript становится понятнее, поэтому я выполняю точки останова в среде chrome js.
[добавлено: 2013-07-18]
добавление кратких шагов для настройки nrepl-brepl
-
Я устанавливаю среду brepl с помощью ниже учебника.
https://github.com/magomimmo/modern-cljs/blob/master/doc/tutorial-02.md
Короче говоря, вам понадобится ниже фрагмент кода где-нибудь в вашем коде clojurescript.
(repl/connect "http://localhost:9000/repl")
-
затем откройте nrepl в emacs (я использую M-x nrepl-jack-in)
-
Введите ниже в своем nrepl
(do
(require 'cljs.repl.browser)
(cemerick.piggieback/cljs-repl
:repl-env
(doto (cljs.repl.browser/repl-env :port 9000)
cljs.repl/-setup)))
-
Вам нужно показать страницу, на которой работают ваши cljs в вашем браузере.
-
проверьте, правильно ли работает nrepl, выполнив ниже на nrepl.
(js/alert "Я готов!" )