如何自动重新加载Clojure代码?

时间:2016-05-08 21:11:35

标签: dynamic clojure

如何自动重新加载Clojure代码?

我看过the presentation。在那里,他们使用一些热插拔Clojure技术,只要对源文件进行更改,就会重新加载代码。我可以运行代码,但我无法观察自动重载的效果。如何重新加载代码?

the source code.

5 个答案:

答案 0 :(得分:2)

(我没有完全重新观看这段视频,但这些笔记来自于我跳过视频并做出有根据的猜测后的观察结果)

从我重新观看此视频看起来,Rich正在评估正在运行的repl中的代码。这允许他更改代码,评估代码并查看不同的行为。

许多编辑都支持在Clojure repl中评估缓冲区中的代码。 Here是一些关于使用CIDER和Emacs进行交互式播放代码的文档。

如果您使用ring进行网页开发,则与相关视频无关。您可以使用wrap-reload中间件在文件发生更改并且请求到达您的Web应用程序时自动重新加载代码。这在开发Clojure Web应用程序时非常有用。

为了自动重新加载和运行你的clojure.tests,我建议lein-test-refresh。它是一个Leiningen插件,用于监视项目的文件更改,当更改内容时,它会重新加载并运行测试。如果您对项目进行了测试,则可以大大加快开发速度。

答案 1 :(得分:2)

根据具体情况,有很多方法可以重新加载代码:

  • Emacs/CIDER重新加载文件的快捷方式。可能Rich正在做类似的事情。另请参阅:How to reload a clojure file in REPL
  • 监视文件并重新加载代码(figwheel进行前端开发,test plugins以及专门用于运行测试的CIDER快捷方式,boot具有watch任务。 ..)
  • 您使用的网络服务器的中间件(ringring.middleware.reload/wrap-reload for thispedestal也附带one,其他网络服务器(如yada)也可以使用组分)
  • component工作流程也有效,有一个带holy-grail的自动重新加载系统的示例

答案 2 :(得分:2)

使用mount来管理组件的启动和停止。例如,在后端Web应用程序中,您可能希望在启动Web服务器之前启动数据库。

然后在emacs中你可以:

(defun cider-repl-refresh ()
(interactive)
(save-some-buffers)
(with-current-buffer (cider-current-repl-buffer)
(goto-char (point-max))
(insert (concat "(require 'clojure.tools.namespace.repl) "
                "(clojure.tools.namespace.repl/refresh)"))
(cider-repl-return)))

答案 3 :(得分:0)

如果你不是非常喜欢Emacs(我喜欢Emacs,但不是每个人都这样做)LightTable也是Clojure / ClojureScript交互式编程的一个非常好的选择。

开发ClojureScript(编译为Javascript的Clojure)LightTableFigwheel是非常好的一对。

在我看来,LightTable对于Webdev方面有一些优势可以抵御Emacs(我从未让苹果酒与ClojureScript完美配合),LightTable基本上是Chrome的专用版本,因为它建立在Electron之上。

在Figwheel GitHub页面上查看此文档:Running Figwheel with LightTable

LightTable + Fighweel

答案 4 :(得分:0)

如果您在IntelliJ中使用Cursive IDE,则必须安装特殊的REPL工具才能获得所需的功能。与终端窗口中的“ lein repl”相比,它具有许多功能。

此处有完整的教程:https://cursive-ide.com/userguide/repl.html

但是,很容易设置默认实例:

  1. 右键单击project.clj / deps.edn->“为...创建副本”。默认设置很好。点击确定/应用。

  2. 右键单击project.clj / deps.edn->“运行Repl for ...”(将打开一个repl窗口)

  3. 请参阅“工具”->“ Repl”以获取命令列表,例如:

  • 切换到副本窗口:Ctrl + \
  • 以repl重新加载当前文件:Alt + Shift + L
  • 发送函数defn以表示:Alt + Shift + M
  • ...还有更多

此外,在编写REPL时,您还将获得完整的代码完成,语法高亮显示等。