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

欢迎!请参阅 关于 页面了解更多关于这一点的工作信息。

0
tools.namespace
编辑

如果您有一个具有 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 的起始/默认假设不再成立。

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

2 答案

0

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

0

预先设置 set-refresh-dirs 是一个非常好的想法。例如,面向生产的脚本、草稿代码等——这些都没有盲目地 require 的安全性(当未配置时,(refresh)默认会这样做)。

...