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
我可以通过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/common
和src/cljs/contempo/view
,如果我需要的contempo.view.whatever
命名空间,编译器会寻找它在src/cljs/contempo/common/contempo/view/whatever.cljs
和src/cljs/contempo/view/contempo/view/whatever.cljs
。
我不得不src/cljs
用作源目录。我想要发布的代码(在不需要的页面上保留了代码)是一种愚蠢的做法(因为无论如何它都会提取ClojureScript的所有内容),现在由于有了Google Closure Module的适当支持而得以正确解决在ClojureScript中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句