Clojure repl - 我如何确保 :reload-all 确实重新加载所有必需的名称空间?

Clojure repl - how can I insure that :reload-all does indeed reload all required namespaces?

在 lein REPL 中有一个奇怪且非常烦人的行为,更不用说经常耗时了。

即,如果我将 :reload-all 与命名空间一起使用,并且它所需的命名空间有错误,则 repl 不会告诉我任何相关信息。它只是采用了所述命名空间的最后一个有效构建,并且没有通知我它这样做了。

显然,在大多数情况下,这是非常不能令人满意的。因为如果 none 所需的命名空间发生了变化,我不会使用 :reload-all ,如果它们发生了变化并且包含错​​误,我非常想知道它,而不是突然想知道为什么我的代码在 REPL 中执行的内容似乎与我在屏幕上显示的代码完全不同。

有没有办法强制这种行为?

tools.namespace 图书馆也许能帮到你。

known issues 个通过 (require ... :reload)(require ... :reload-all) 重新加载代码。因此,请尝试使用 clojure.tools.namespace/refresh:

而不是 require
user> (clojure.tools.namespace.repl/refresh)

它将扫描您的项目以查找已更改的 files/namespaces 并以正确的顺序重新加载它们及其依赖项。

refresh 将在重新加载期间 report about errors 从属命名空间中。

此外,请阅读有关 requirements for your code to use this library and potential issues 的内容。