在路径 {{public/js/out/foo/bar.cljc}} 有一个 cljc 文件,其 ns 形式为 {{(ns foo.bar)}},这将导致命名空间 {{foo.bar}} 被重新加载。
这是有问题的,因为 ClojureScript 编译器会将所有输入文件复制到 {{:output-dir}} 以用于 source-map。最近,由于越来越多的库开始使用 cljc,当库在 Clojure 环境中使用时,这开始引起问题。Cljs 编译将导致库代码的重新加载,可能会重定义协议等,并破坏 Clojure 环境。
我认为对于 tools.namespace 来说,忽略文件路径和命名空间不匹配的变化是有意义的。
另一个问题以及可能解决问题的方法,是要理解为什么在这个情况下依赖项解析不起作用:依赖于输出目录中 cljc 文件的协议的命名空间没有重新加载。