Има ли добър работен процес на ClojureScript?

Опитвам се да използвам 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 секунди) и да презаредя страницата след това, след което да започна отново да опитвам неща в приятелска среда.

Мисля, че вероятно някой е разбрал всичко и има работен процес, който работи. Моля, помогнете ми да го настроя от самото начало, защото се чувствам като провален софтуерен инженер.


person Valentin Golev    schedule 27.01.2013    source източник
comment
Здравей Валя, отговорът ми помогна ли ти с работния процес на clojure? Мисля, че този работен процес е много удобен   -  person tangrammer    schedule 21.10.2013


Отговори (5)


Вижте figwheel! Това е като livereload на стероиди.
Работата с clojurescript и front-end разработка никога не е била толкова забавна!
Вижте сами (демото е малко остаряло – сега е още по-добро!)
Не просто презарежда страницата, когато файловете се променят – то ви предоставя интерактивно програмиране Брет Виктор говореше за (препоръчвам ви да гледате този разговор, ако не сте)

person t3chn0b0y    schedule 22.01.2015

За мен Catnip предоставя най-доброто изживяване за разработчици за ClojureScript в момента.

person Dimagog    schedule 27.01.2013

Опитах в Emacs този инструмент https://github.com/cemerick/austin и работи много добре както можете да видите в неговата демонстрация и скрийнкаст.

Желая ти добро развитие Хуан

person tangrammer    schedule 16.10.2013

Когато в режим на разработка превключите :optimizations на :none, има огромна разлика, че няма да промени първоначалното време за компилиране, но всички допълнителни промени обикновено отнемат само милисекунди.

Имам следното в моя project.clj

 :cljsbuild {:builds [{;; Directories of interest:
                        :source-paths ["src"]
                        ;; Compiler flags:
                        :compiler {;; Where to save the file:
                                   :output-to "resources/public/js/app.js"
                                   ;; Where to put the output directory
                                   :output-dir "resources/public/js/out"
                                   ;; Optimizations:
                                   :optimizations :none
                                   }}]}
person Paul Whelan    schedule 13.01.2015

времето за компилация за малък файл е твърде голямо

Опитайте :optimizations :whitespace. И използвайте lein cljsbuild auto

Второ, от време на време получавам такива неща: ......

Не съм срещал този проблем преди. Изглежда като грешка в cljsbuild. Опитайте да промените друга версия може би. Използвам [lein-cljsbuild "1.0.2"] с [org.clojure/clojurescript "0.0-2156"]. 1.0.3 не работи в моята настройка.

Третото нещо, което не успях да разбера, е REPL

Във вашия случай ключовият момент е да намерите начин за презареждане на пространствата от имена без рестартиране на REPL или презареждане на страница.

Смятам, че load-file е добър за това.

Моят работен процес е:

  1. Първо стартиране REPL: rlwrap lein trampoline cljsbuild repl-listen
  2. Уверете се, че има (repl/connect "http://localhost:9000/repl") в моя код.
  3. Отворете страницата ми в браузъра.
  4. Направете тест (my-namespace/my-func a b c)
  5. Редактирайте моите кодове.
  6. В моя REPL изпълнете (load-file "path-to-my-file.cljs")
  7. Повторете 4

Това все още е доста досаден работен процес. load-file е бавен и крехък, така че понякога преглеждам, за да тествам. Надявам се, че някой може да даде по-добър отговор.

person Ming    schedule 25.09.2014