如果您有一个具有 git 依赖关系的 deps.edn
项目,同时使用 clojure.tools.namespace.repl/refresh
,那么默认情况下,refresh
调用将加载并刷新您的 git 依赖中的所有 clojure 命名空间。
我认为它这样做是因为在 tools.deps 出现之前,所有库依赖都以 jar 的形式分发,因此它会假设类路径中的任何目录都包含您的项目源代码,并可以从刷新中受益。
在 tools.deps
项目中,这种假设发生了变化,因为依赖项现在可以存储在 ~/.gitlibs
目录上的文件系统中。这些依赖项本质上被错误地认为是要依赖的项目依赖项,并且会被加载和刷新,即使您的项目实际上并没有 require
它们。
鉴于 ~/.gitlibs
是经过版本控制的并且打算不可变,所以自动要求并刷新它们在某种程度上来说是没有意义的。
通过一种叫做 (tnsrepl/set-refresh-dirs "src" "test")
的明确调用很容易避免这个问题,但我认为将 tools.namespace
默认排除 ~/.gitlibs
以下的一切会更好,因为 tools.namespace
的起始/默认假设不再成立。
注意:这可能与这个问题 有关。