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

Why doesn't figwheel pass the compiled app to the browser?

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

这与预期的 lein figwheel 运行良好。

接下来,我做的第一件事是将 "Views" 函数分解成单独的文件,并将它们添加到应用命名空间:

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"]]])

当我在浏览器(chromium 或 firefox)中查看应用程序时,它卡在了 "ClojureScript has not been compiled!",尽管它似乎在终端中编译成功。如果我在图形轮 REPL 中输入命令,当它在浏览器中运行时我会看到绿色的 Clojure 徽标,所以我知道它已连接。

几个月前,我在一个试剂应用程序中使用了这个——发生了什么事? 我应该如何分离我的视图代码? (单个文件难以管理;这是很多问题。)

如果你真的只有 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 ...

然后就在家-page.cljs:

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

(defn home-page [] ....