Подтвердить что ты не робот

Как отладить ClojureScript

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

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

Итак, вот проблема:

  • Я пишу файлы *.cjs
  • Я запускаю cljsc/build...
  • Загружаю свою веб-страницу.
  • Что-то плохое происходит.
  • Я открываю консоль firefox.
  • Я получаю строку в сгенерированном js, который я нахожу непонятным, и я понятия не имею, к какой строке исходного файла cljs он пришел.

Мой вопрос:

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

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

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

ОБНОВЛЕНИЕ. Все изменилось совсем немного, так как этот вопрос был впервые задан. Правильный способ отладки приложений ClojureScript в наши дни - включить исходные карты - http://github.com/clojure/clojurescript/wiki/Source-maps

4b9b3361

Ответ 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 "Я готов!" )