Я пытаюсь использовать ClojureScript для проекта. Чтобы быть счастливым разработчиком, мне нужен быстрый цикл обратной связи: напишите какой-нибудь код и увидите его как можно скорее. Я также хотел бы использовать REPL в контексте текущей страницы.
Я использую lein-cljsbuild
и из проблем, которые у меня возникают, я думаю, что я не смог правильно настроить его.
Прежде всего, время компиляции для небольшого файла слишком велико, даже после "разминки JWM" с помощью :optimizations :simple
:
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 8.233018 seconds.
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 5.522989 seconds.
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Successfully compiled "resources/public/js/cljs.js" in 8.144354 seconds.
Во-вторых, время от времени я получаю такие вещи:
Compiling "resources/public/js/cljs.js" from ["src-cljs"]...
Compiling "resources/public/js/cljs.js" failed.
Exception in thread "main" java.lang.NullPointerException
at java.util.regex.Matcher.getTextLength(Matcher.java:1140)
at java.util.regex.Matcher.reset(Matcher.java:291)
at java.util.regex.Matcher.<init>(Matcher.java:211)
at java.util.regex.Pattern.matcher(Pattern.java:888)
at clj_stacktrace.utils$re_gsub.invoke(utils.clj:6)
# ... many similar useless lines
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
Эти stacktraces (в большинстве случаев связанные с синтаксическими ошибками, как я понял из экспериментов) хуже, чем не полезно: не только они дают нулевые подсказки об ошибке, но также останавливают автоматическую перекомпиляцию. После каждой такой stacktrace я должен делать следующее:
- Подумайте, в чем проблема, используя технику, которую я называю "притворяюсь, что вы парсер". Слава богу, это Lisp, и единственное, что я должен сделать, это тщательно подсчитать совпадающие круглые скобки.
- Нажмите
Cmd-C
в оболочке, где выполняетсяlein cljsbuild auto
- Запустите
lein cljsbuild auto
снова - Сделайте несколько бесполезных изменений, таких как вставка новой строки, в файл, чтобы запустить новую сборку
- Подождите ~ 30 секунд, пока файл не будет скомпилирован снова, так как JVM снова должен "разогреться"
- Во многих случаях на этом этапе я получаю еще один стек, после получения которого я должен намыться, ополоснуть и повторить всю проклятую процедуру.
Третья вещь, которую я не понял, - REPL. Из interwebs я узнал, как подключить rlwrap lein trampoline cljsbuild repl-listen
к текущей странице. Тем не менее, каждая перезагрузка, навигация и синтаксическая ошибка (не дай бог, чтобы вы забыли использовать rlwrap
и нажмите клавишу со стрелкой) в консоли делает REPL полностью застрявшим. Я должен перезапустить его (~ 10 секунд) и перезагрузить страницу после этого, а затем начать снова пробовать вещи в дружественной среде.
Я думаю, возможно, кто-то все это понял и имеет рабочий процесс, который работает. Пожалуйста, помогите мне настроить все с самого начала, потому что я чувствую себя неудачным инженером-программистом.