Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有好的ClojureScript工作流吗?_Clojure_Workflow_Read Eval Print Loop_Clojurescript - Fatal编程技术网

有好的ClojureScript工作流吗?

有好的ClojureScript工作流吗?,clojure,workflow,read-eval-print-loop,clojurescript,Clojure,Workflow,Read Eval Print Loop,Clojurescript,我正试图在一个项目中使用ClojureScript。要成为一名快乐的开发人员,我需要一个快速的反馈循环:编写一些代码并尽快查看。我还希望在当前页面的上下文中使用REPL 我使用的是lein cljsbuild,从我遇到的问题来看,我认为我没有正确设置它 首先,小文件的编译时间太长,即使在使用:优化:simple“JWM预热”之后: Compiling "resources/public/js/cljs.js" from ["src-cljs"]... Successfully compiled

我正试图在一个项目中使用ClojureScript。要成为一名快乐的开发人员,我需要一个快速的反馈循环:编写一些代码并尽快查看。我还希望在当前页面的上下文中使用REPL

我使用的是
lein cljsbuild
,从我遇到的问题来看,我认为我没有正确设置它

首先,小文件的编译时间太长,即使在使用
:优化:simple
“JWM预热”之后:

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)
从[“src cljs”]编译“resources/public/js/cljs.js”。。。
编译“resources/public/js/cljs.js”失败。
线程“main”java.lang.NullPointerException中出现异常
位于java.util.regex.Matcher.getTextLength(Matcher.java:1140)
位于java.util.regex.Matcher.reset(Matcher.java:291)
位于java.util.regex.Matcher。(Matcher.java:211)
位于java.util.regex.Pattern.matcher(Pattern.java:888)
在clj_stacktrace.utils$re_gsub.invoke(utils.clj:6)
# ... 许多类似的无用线路
在clojure.lang.Var.applyTo(Var.java:532)
在clojure.main.main(main.java:37)
这些堆栈跟踪(大部分时间与语法错误有关,正如我从实验中了解到的那样)比没有帮助更糟糕:它们不仅提供了关于错误的零线索,还停止了自动重新编译。在每次这样的跟踪之后,我应该做以下事情:

  • 使用一种我称之为“假装你是解析器”的技术,找出问题所在。谢天谢地,这是Lisp,我唯一应该做的就是仔细计算匹配的括号
  • 在运行
    lein cljsbuild auto
    的shell中按
    Cmd-C
  • 再次运行
    lein cljsbuild auto
  • 进行一些无用的更改,比如在文件中插入换行符,以触发新的构建
  • 等待约30秒,直到再次编译该文件,因为JVM必须再次“预热”
  • 在很多情况下,在这一点上,我得到了另一个stacktrace,在得到它后,我必须起泡,冲洗和重复所有该死的程序
第三件我不明白的事是REPL。从互联网络中,我学会了如何将
rlwrap-lein-trampoline-cljsbuild-repl-listen
连接到当前页面。但是,控制台中的每一次重新加载、导航和语法错误(但愿您不会忘记使用
rlwrap
并按箭头键)都会使REPL完全卡住。我必须重新启动它(~10秒),然后重新加载页面,然后在友好的环境中再次尝试


我想,也许有人已经把这一切都弄明白了,并且有了一个工作流程。请帮我从一开始就把它设置好,因为我觉得自己像一个失败的软件工程师。

为我提供了目前ClojureScript的最佳开发体验。

我在Emacs内部尝试过这个工具,效果非常好,你可以在他的演示和屏幕上看到

发展良好 胡安

小文件的编译时间太长

尝试
:优化:空白
。并使用
lein cljsbuild auto

第二,我不时会收到这样的东西:

我以前从未遇到过这个问题。它看起来像cljsbuild中的一个bug。试着换个版本。我正在使用
[lein cljsbuild“1.0.2”]
[org.clojure/clojurescript“0.0-2156”]
1.0.3
在我的设置中不起作用

第三件我不明白的事是REPL

在您的例子中,关键点是找到一种方法,在不重新启动REPL或重新加载页面的情况下重新加载名称空间

我发现
加载文件
对此很有好处

我的工作流程是:

  • 第一次开始应答:
    rlwrap lein蹦床cljsbuild REPL listen
  • 确保有
    (repl/connect“http://localhost:9000/repl“”
    在我的代码中
  • 在浏览器中打开我的页面
  • 做一些测试
    (我的命名空间/我的函数a b c)
  • 编辑我的代码
  • 在my REPL中,运行
    (加载文件“path to my file.cljs”)
  • 重复
    4

  • 这仍然是一个相当烦人的工作流程<代码>加载文件速度慢且脆弱,因此有时我需要使用浏览器进行测试。我希望有人能提供一个更好的答案。

    在开发模式下,将:optimizations转换为:none,这会产生巨大的差异,不会更改初始编译时间,但任何额外的更改通常只需要几毫秒

    我的项目中有以下内容。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
                                       }}]}
    
    退房!就像服用类固醇的利弗雷罗德一样。
    使用clojurescript和前端开发从来没有这么有趣过
    (演示版有点过时,现在更好了!)

    它不仅在文件更改时重新加载页面–它还为您提供了交互式编程(如果您没有看过,我建议您观看该演讲)

    嗨,Valya,我的回答对您使用clojure工作流有帮助吗?我认为这个工作流程非常舒适