lein cljsbuild
在找不到一个与另一个命名空间/文件定义的文件时会出现问题,除非我确保它们按照一定的顺序编译。
我的目录结构如下:
project/
project.clj
src/
cljs/
contempo/
common/
defs.cljs
view/
core.cljs
navigation.cljs
navigation.cljs
有一些用于构建Om组件以在页面上导航的内容,而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
如果我从 core.cljs
中删除所有与 contempo.view.navigation
相关的引用,运行 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。
lein clean
命令清理一下。如果这不起作用,请前往您的~/.m2/
目录并删除您的 Clojurescript 和 Clojure 依赖项,它们可能处于错误状态。 - sbensu