有一个很好的ClojureScript工作流程吗?

Val*_*lev 24 workflow clojure read-eval-print-loop 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.
Run Code Online (Sandbox Code Playgroud)

其次,我不时会得到这样的东西:

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)
Run Code Online (Sandbox Code Playgroud)

这些堆栈跟踪(大部分时间与语法错误有关,正如我从实验中所理解的那样)比没有帮助更糟糕:它们不仅提供关于错误的零线索,还停止自动重新编译.在每次这样的堆栈跟踪之后,我应该做这些事情:

  • 找出问题是什么,使用我称之为"假装你是解析器"的技术.感谢上帝,它是Lisp,我唯一应该做的就是仔细计算匹配的括号.
  • 按下运行Cmd-C的shelllein cljsbuild auto
  • 再跑lein cljsbuild auto一次
  • 进行一些无用的更改,比如在文件中插入换行符,以触发新的构建
  • 等待约30秒直到再次编译文件,因为JVM必须再次"预热"
  • 在许多情况下,在这一点上,我得到另一个堆栈跟踪,在得到我必须起泡,冲洗并重复所有该死的程序

我无法理解的第三件事是REPL.从interwebs我已经学会了如何连接rlwrap lein trampoline cljsbuild repl-listen到当前页面.但是,每次重新加载,导航和语法错误(上帝禁止您忘记使用rlwrap并按箭头键)都会使REPL完全卡住.我必须重新启动它(约10秒)并在此之后重新加载页面,然后再开始在友好的环境中尝试输出.

我想,可能有人已经全力以赴,并且有一个有效的工作流程.请帮我从一开始就把它全部设置好,因为我觉得自己是一个失败的软件工程师.

Dim*_*gog 5

对我来说,Catnip目前为ClojureScript提供了最佳的开发体验.


t3c*_*b0y 3

看看无花果轮!这就像类固醇的肝脏重装。
\n使用 clojurescript 和前端开发从未如此有趣!
\n亲自看看(演示有点过时 \xe2\x80\x93 现在更好了!)
\n它不仅仅是在文件更改时重新加载页面 \xe2\x80\x93 它为您提供交互式编程Bret维克多正在谈论(如果您还没有看过,我建议您观看该演讲)

\n