lein cljsbuild
在查找与另一个命名空间/文件一起定义的命名空间/文件时遇到问题,除非我确保它们按特定顺序编译。ClojureScript编译器无法在同一目录中找到命名空间/文件
我的目录结构是这样的:
project/
project.clj
src/
cljs/
contempo/
common/
defs.cljs
view/
core.cljs
navigation.cljs
navigation.cljs
有一些东西来构建嗡组件页面各处导航和core.cljs
是这个特定页面的主入口点。 navigation.cljs
打头:
(ns contempo.view.navigation (:require ...))
core.cljs
打头:
(ns contempo.view.core (:require [contempo.view.navigation :as navigation]))
当我运行lein cljsbuild
,我得到:
solace:Groov jfischer$ lein cljsbuild auto
Compiling ClojureScript.
Compiling "war/view/js/app.js" from ["src/cljs/contempo/common" "src/cljs/contempo/view"]...
Compiling "war/view/js/app.js" failed.
clojure.lang.ExceptionInfo: failed compiling file:src/cljs/contempo/view/core.cljs
... snipped stacktrace ...
Caused by: clojure.lang.ExceptionInfo: No such namespace: contempo.view.navigation at line 1 src/cljs/contempo/view/core.cljs
我可以得到它通过删除所有引用contempo.view.navigation
工作core.cljs,运行lein cljsbuild auto
并让编译完成,然后把它们放回去并保存(所以cljsbuild接受更改),但这是愚蠢,不应该是必要的。
我project.clj
样子:
(defproject contempo "0.0.0-SNAPSHOT"
:description "Experimenting with ClojureScript and Om"
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/clojurescript "0.0-2740"]
[org.clojure/core.async "0.1.346.0-17112a-alpha"]
[org.omcljs/om "0.8.7"]]
:plugins [[lein-cljsbuild "1.0.4"]]
:clean-targets ^{:protect false} ["war/view/js/app.js"
"war/view/js/out"]
:cljsbuild {:builds [{:id "view-dev"
:source-paths ["src/cljs/contempo/common"
"src/cljs/contempo/view"]
:compiler {:output-to "war/view/js/app.js"
:output-dir "war/view/js/out"
:optimizations :none
:cache-analysis true
:source-map true}}]})
有什么明显我做错了吗?这看起来很像我看过的每个ClojureScript项目。
更新:显示错误微小的骨架项目是在这里:namespace-error-demo.zip
适用于我,没有错误/警告。我怀疑你是否有循环依赖或者其中一个源文件无法编译。另外,可能值得尝试使用单一源代码路径'“src/cljs/contempo /”' – Jarlax 2015-02-06 12:26:33
检查循环依赖关系,将它折叠为只有一个源代码路径,并且实际上删除了几乎所有的代码,而且我仍然得到错误。 一个很小的项目,演示它可以在这里找到:[namespace-error-demo.zip](http://www.mohiji.org/files/namespace-error-demo。zip) – Jonathan 2015-02-07 00:40:53
我刚刚下载和编译演示没有问题。试着用'lein clean'。如果这不起作用,进入你的'〜/ .m2 /'目录并删除你的Clojurescript和Clojure依赖项,它们可能会处于不良状态。 – sbensu 2015-02-07 13:23:45