根据情况,有很多种重新加载代码的方式:
watch
任务...)ring.middleware.reload/wrap-reload
,pedestal也配备了one,其他像yada
这样的Web服务器与组件兼容)我没有完全重新观看这个视频,但是这些笔记是我在跳过视频并做出合理猜测后观察到的。
从我重新观看的这段视频中可以看出,Rich正在评估一个运行中的repl中的代码。这使他能够更改代码、评估它并查看不同的行为。
许多编辑器支持在Clojure repl中对缓冲区中的代码进行评估。这里有一些关于使用Emacs和CIDER互动地玩耍你的代码的文档。
与所讨论的视频无关,如果您正在使用ring进行Web开发。您可以使用wrap-reload中间件,在文件已更改并请求命中您的Web应用程序时自动重新加载代码。在开发Clojure Web应用程序时,这非常有用。
对于自动重新加载和运行clojure.tests,我推荐使用lein-test-refresh。它是一个Leiningen插件,可监视您的项目文件更改,当有变化时重新加载并运行您的测试。如果您的项目有测试,这将大大加快开发速度。
defn
中即可使其成为程序的一部分。 - Ben Kovitz使用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)))
如果你不是特别喜欢Emacs(我喜欢Emacs,但嘿,并不是每个人都喜欢),LightTable也是Clojure/ClojureScript交互式编程的一个非常好的选择。
对于开发ClojureScript(编译成Javascript的Clojure),LightTable和Figwheel是一个非常好的组合。
在我看来,LightTable在Web开发方面比Emacs有一些优势(我从未完美地让cider与ClojureScript配合工作),因为它是基于Electron构建的Chrome的专业版本。
请查看Figwheel GitHub页面上的此文档:使用LightTable运行Figwheel: