Clojure 如何在Leiningen REPL中保存文件时热重新加载命名空间
使用leiningen REPL时,是否有一种方法可以使文件或ns在保存文件时自动重新加载到REPL中。目前,我通过在repl-Clojure 如何在Leiningen REPL中保存文件时热重新加载命名空间,clojure,leiningen,Clojure,Leiningen,使用leiningen REPL时,是否有一种方法可以使文件或ns在保存文件时自动重新加载到REPL中。目前,我通过在repl-中键入以下内容来重新加载ns(使用'sample.ns:reload all) 但是,我可以让它在文件保存时自动重新加载吗?库满足您的需要。它观察一个文件并执行一些操作。在您的情况下,一个操作是从该文件重新加载名称空间。此外,它还需要编写一些初始代码来启动观察器 这种方式对我来说有点复杂。从Lein直接推出的普通REPL不是有效的开发方式。您最好使用一些对Clojure
中键入以下内容来重新加载ns(使用'sample.ns:reload all)
但是,我可以让它在文件保存时自动重新加载吗?库满足您的需要。它观察一个文件并执行一些操作。在您的情况下,一个操作是从该文件重新加载名称空间。此外,它还需要编写一些初始代码来启动观察器
这种方式对我来说有点复杂。从Lein直接推出的普通REPL不是有效的开发方式。您最好使用一些对Clojure友好的编辑器,如Emacs或Lightable。大多数主要编辑器都支持自定义热键绑定,并且有一个Clojure插件,允许您通过网络(通过“nREPL”)连接到活动的REPL。就个人而言,我使用vim,因此为此目的使用
这意味着您可以有一个自定义热键,用于在编辑任何文件时重新加载该文件。从这里开始,添加一个用于重新加载的自定义on-save钩子通常很简单 您可以轻松地重用框架中的代码 您将只需要文件监视程序 下面是它的外观:
(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}]))
你在用emacs吗?因为如果是这样,这是slime/swank支持的功能: