2024Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面了解有关该功能的更多信息。

0
tools.namespace
编辑

如果您有一个包含 git 依赖项的 deps.edn 项目,在该项目中您也使用了 clojure.tools.namespace.repl/refresh,那么默认情况下,refresh 调用将加载和刷新您的 git 依赖项中的所有 Clojure 命名空间。

我认为它是这样做的,因为在 tools.deps 出现之前,所有库依赖项基本上都作为 jars 分发,所以它会假设类路径中的任何目录都包含您项目的源代码,并且会从通过刷新重新加载中受益。

tools.deps 项目的此假设发生了变化,因为依赖项现在可以存储在 ~/.gitlibs 目录中的文件系统上。这些依赖项基本上被误认为是项目依赖项,都被加载和刷新,即使您的项目实际上并没有 require 它们。

考虑到 ~/.gitlibs 是版本化的并且旨在不可变,因此自动需要和刷新它们从理论上讲并不是很有意义。

这很容易避免,只需包含一个调用以明确设置您的项目刷新目录,如下所示:(tnsrepl/set-refresh-dirs "src" "test"),但是我 wondering 如果 tools.namespace 默认排除 ~/.gitlibs 下的所有内容会更好,因为 tools.namespace 的起始/默认假设不再成立。

注意:这可能与此问题有关。

2 答案

0

在我看来,在 tools.namespace 的上下文中,将 ~/.gitlibs 特殊化是没有意义的。这实际上是更一般问题的具体实例——确定被认为是“项目”的类路径的子集。我对这里的原始意图不够熟悉,无法确定这是 tns 设计的问题,还是其文档的问题,或是一些附加的问题。

0

事先设置 set-refresh-dirs 是一个非常好的主意。例如,面向生产的脚本、草案代码等——这些都不倾向于盲目地 require(这是 (refresh) 在未配置时所做的)。

...