Опитвам се да използвам 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)
Тези следи на стека (повечето от времето, свързани със синтактични грешки, както разбрах от експериментирането), са по-лоши от това да не са полезни: те не само предоставят нулеви улики за грешката, но и спират автоматичното повторно компилиране. След всяко такова проследяване на стека трябва да правя следните неща:
- Разберете какъв е проблемът, като използвате техника, която наричам "преструвай се, че си анализатор". Слава Богу, че е Lisp и единственото нещо, което трябва да направя, е внимателно да преброя съвпадащите скоби.
- Натиснете
Cmd-C
в обвивката, където се изпълняваlein cljsbuild auto
- Стартирайте
lein cljsbuild auto
отново - Направете някаква безполезна промяна, като вмъкване на нов ред, във файла, за да задействате нова компилация
- Изчакайте ~30 секунди, докато файлът се компилира отново, тъй като JVM трябва да "загрее" отново
- В много случаи в този момент получавам още един stacktrace, след като го получа, трябва да напена, изплакна и повторя цялата проклета процедура
Третото нещо, което не успях да разбера, е REPL. От interwebs научих как да свържа rlwrap lein trampoline cljsbuild repl-listen
с текущата страница. Въпреки това, всяко презареждане, навигация и синтактична грешка (не дай си боже, забравете да използвате rlwrap
и натиснете клавиш със стрелка) в конзолата прави REPL напълно блокиран. Трябва да го рестартирам (~10 секунди) и да презаредя страницата след това, след което да започна отново да опитвам неща в приятелска среда.
Мисля, че вероятно някой е разбрал всичко и има работен процес, който работи. Моля, помогнете ми да го настроя от самото начало, защото се чувствам като провален софтуерен инженер.