使用leiningen REPL时,有没有办法让文件或ns在repl on file保存中自动重新加载。目前,我通过在repl - (use 'sample.ns :reload-all)
中键入以下内容来重新加载ns。
但是,我可以在文件保存时自动重新加载吗?
答案 0 :(得分:0)
Clojure-Watch库可以满足您的需求。它会观察文件并执行某些操作。在您的情况下,操作将是从该文件重新加载命名空间。此外,它需要编写一些初始代码来启动观察者。
这种方式对我来说似乎有点复杂。直接从Lein发起的普通REPL并不是一种有效的开发方式。你最好使用一些Clojure友好的编辑器,如Emacs或Lightable。
答案 1 :(得分:0)
大多数主要编辑器都支持自定义热键绑定,并有一个Clojure插件,允许您通过网络连接到活动的REPL(通过“nREPL”)。就个人而言,我使用vim,因此使用vim-fireplace来实现此目的。
这意味着您可以使用自定义热键在编辑时重新加载正在编辑的文件。从那里,添加一个自定义的on-save钩子来重新加载通常是微不足道的。
答案 2 :(得分:0)
您可以轻松地重用duct框架中的代码。
您仅需要hawk个文件查看器。
这是它的样子:
(defn- clojure-file? [_ {:keys [file]}]
(re-matches #"[^.].*(\.clj|\.edn)$" (.getName file)))
(defn- auto-reset-handler [ctx event]
(binding [*ns* *ns*]
(clojure.tools.namespace.repl/refresh)
ctx))
(defn auto-reset
"Automatically reset the system when a Clojure or edn file is changed in
`src` or `resources`."
[]
(hawk.core/watch! [{:paths ["src/" "resources/" "dev/src/" "dev/resources/"]
:filter clojure-file?
:handler auto-reset-handler}]))