gpt4 book ai didi

ClojureScript 编译器在同一目录中找不到命名空间/文件

转载 作者:行者123 更新时间:2023-12-04 14:11:59 26 4
gpt4 key购买 nike

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/commonsrc/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)并且现在由于 proper Google Closure Module support in ClojureScript 得到了正确解决。 .

关于ClojureScript 编译器在同一目录中找不到命名空间/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28354539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com