为什么figwheel不将已编译的应用程序传递给浏览器?

时间:2015-09-21 22:23:05

标签: java clojure leiningen clojurescript reagent

我正在使用Leiningen 2.5.2(Java 1.8.0_45-internal Open JDK 64位)和试剂模板(即lein new reagent foo)。

这与lein figwheel按预期正常运行。

接下来,我要做的第一件事就是将“视图”功能分解为单独的文件并将它们添加到应用程序命名空间中:

core.cljs片段:

;; -------------------------
;; Views

(:require home-page)

home-page.cljs(整个文件):

(ns foo.core)

(defn home-page []
  [:div [:h2 "Welcome to foo"]
   [:div [:a {:href "#/about"} "go to about page"]]])

当我在浏览器中查看应用程序(chrome或firefox)时,它会陷入“ClojureScript尚未编译!”尽管看似在终端成功编译。如果我在图形REPL中输入命令,当它在浏览器中工作时,我会看到绿色的Clojure徽标,所以我知道它已连接。

我几个月前在试剂应用程序中工作了 - 发生了什么? 应该如何我将我的视图代码分开? (单个文件无法管理;这是很多Hiccup。)

1 个答案:

答案 0 :(得分:3)

如果你在core.cljs中只有(:require home-page)行,那应该是罪魁祸首。冒号表示法:require仅在具有ns的名称空间声明中有效。此外,您在错误的文件(home-page.cljs,而不是core.cljs)中声明核心命名空间。请查看this article on namespaces in Clojure以获得详尽的解释。

你需要core.cljs中的以下内容:

(ns foo.core
  (:require [foo.home-page :as hp :refer [home-page]]))
.... more core.cljs code ...

然后只需在home-page.cljs:

(ns foo.home-page
  (:require ....reagent namespaces as needed ....

(defn home-page [] ....