Clojure不需要cljc文件

时间:2016-02-07 15:30:59

标签: clojure clojurescript

我需要在我的Clojure(Garden)和我的ClojureScript(Reagent)之间共享命名空间。

目前项目文件夹如下所示:

src/
  clj/
    name/
      css.clj
  cljs/
    name/
      core.cljs
  cljc/
    name/
      config.cljc

config.cljc文件具有以下命名空间:(ns name.config)

我尝试使用require在clj/name/css.clj内引用此命名空间。

(ns name.css
  (:require [name.config :as config]))

但是,这会导致Garden出现编译错误。

  

引起:java.io.FileNotFoundException:无法在类路径上找到name / config__init.class或name / config.clj。

我猜它甚至没有检查cljc个文件。

我将"src/cljc"添加到:source-pathsproject.clj中的:garden :builds向量,但即使重新启动构建过程后,我也会遇到相同的错误。

我在Clojure 1.7.0和1.8.0上看到了这种行为。

值得一提的是,它在ClojureScript中没有问题(使用Figwheel处理构建)。我可以毫无问题地要求并使用新的命名空间。

似乎我必须遗漏一些非常简单的东西,因为.cljc文件周围的文档都没有提及要求它们。

2 个答案:

答案 0 :(得分:5)

检查您project.clj中是否使用了Clojure 1.7或更高版本。此错误消息:

  

引起:java.io.FileNotFoundException:无法在类路径上找到name / config__init.class或name / config.clj。

表示您使用的是Clojure 1.6或更低版本,因为这些版本的Clojure只知道查找.class.clj个文件。

答案 1 :(得分:0)

当我在项目中将文件从.clj移动到.cljc时,我遇到了同样的错误。我做了lein clean,但没有效果。最后我重命名了模块命名空间并修复了它。

(我的猜测是有一些编译模块的缓存,它引用了一个不再存在的模块,但是cljc没有被重新编译,因为该名称的模块仍然被缓存。)

当我重命名模块命名空间时,它没有任何其他代码更改。