ClojureScript编译器无法在同一目录中找到名称空间/文件

乔纳森

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.cljssrc/cljs/contempo/view/contempo/view/whatever.cljs

我不得不src/cljs用作源目录。我想要发布的代码(在不需要的页面上保留了代码)是一种愚蠢的做法(因为无论如何它都会提取ClojureScript的所有内容),现在由于有了Google Closure Module的适当支持而得以正确解决在ClojureScript中

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

.NET 无法在同一目录中找到非托管 DLL

React-native 无法在同一目录中找到图像

无法从同一目录导入文件

使用javac的Java文件编译无法引用同一目录中的其他文件

CGo不在同一目录中编译C文件

Eclipse可以找到文件,但是Exe文件无法找到,尽管该文件位于同一目录中,

编译器无法在app.config中找到属性

无法在ZKUI中找到Javac编译器

GO:无法从同一目录中的文件导入函数

VS Code 无法识别同一目录中的文件

无法从同一目录中的文件导入函数

无法在同一目录中导入.sage文件

无法导入同一目录下的其他文件

Pygame:无法打开文件。同一目录

在同一目录中的多个二进制矩阵中找到0的数量?

类无法在同一名称空间中找到另一个类

如何设置gruntfile,使编译后的文件与源文件位于同一目录

Python的文件未找到错误,即使文件在同一目录

搜索文件中的字符串,如果找到,则检查在同一目录中是否存在具有成对名称的文件

Java编译器为什么不能从另一个文件中找到类?

使用其他名称将文件复制到同一目录

在同一目录中列出具有相同名称的文件夹-Delphi

如何在Windows的同一目录中复制具有不同名称的文件

同一目录中的两个具有相同名称的文件

Java将文件以相同的名称保存在同一目录中,但扩展名不同

Vala 编译器无法从库 Libsoup 2.4 中找到 soup.h

即使与我正在使用的文件位于同一目录中,也无法导入模块

与html文件位于同一目录中的外部javascript无法正常工作

无法导入存在于同一目录中的文件