我正在尝试连接到 ClojureScript 浏览器 REPL,但遇到了clojure.browser.repl/connect
. 我编译的 JavaScript在顶部的 Google Closure 代码块中TypeError
尝试调用对象。我正在按照ClojureScript:启动并运行(第 9 章,第 78 页,可在预览版中获得)中的说明进行操作,并且想知道自发布以来,用于此的工具是否发生了变化。appendChild
null
我正在使用 Leiningen 2.0.0、Java 1.6.0_37、OS X 10.7.5,以及我的依赖项project.clj
:
(defproject brepl-hello "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.4.0"]
[org.clojure/clojurescript "0.0-1552"]
[compojure "1.1.5"]
[ring/ring-jetty-adapter "1.1.8"]]
:plugins [[lein-cljsbuild "0.3.0"]]
:source-paths ["src/clj"]
:cljsbuild {:builds [{
:source-paths ["src/cljs"]
:compiler {
:output-to "resources/public/brepl-hello.js"
:optimizations :whitespace
:pretty-print true}}]})
这是唯一的 ClojureScript 源文件src/cljs/brepl_hello/brepl-hello.cljs
:
(ns brepl-hello
(:require [clojure.browser.repl :as repl]))
(repl/connect "http://localhost:9000/repl")
这将编译为resources/public/brepl-hello.js
我插入到index.html
同一目录中的文件:
<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript" src="brepl-hello.js"></script>
</head>
<body>
</body>
</html>
我一直在使用 REPL 或 Python SimpleHTTPServer 的 Ring/Jetty 在端口 3000 上提供此服务。当我在 Chrome 中打开此页面时,开发控制台显示,并在已编译的 js 文件顶部的 Google Closure 代码中Uncaught TypeError: Cannot call method 'appendChild' of null
回溯到此if
/块,其中(作为参数传递给包含函数)是。else
parentElm
null
if(goog.userAgent.GECKO || goog.userAgent.WEBKIT) {
window.setTimeout(goog.bind(function() {
parentElm.appendChild(iframeElm);
iframeElm.src = peerUri.toString();
goog.net.xpc.logger.info("peer iframe created (" + iframeId + ")")
}, this), 1)
}else {
iframeElm.src = peerUri.toString();
parentElm.appendChild(iframeElm);
goog.net.xpc.logger.info("peer iframe created (" + iframeId + ")")
}
这似乎是一个问题clojure.browser.repl/connect
。将 ClojureScript 源代码中的这一行替换为以下内容:
(ns brepl-hello
(:require [clojure.browser.repl :as repl]))
(.write js/document "Hello World!")
将在浏览器中编译和运行就好了。我怀疑在我的构建设置或目录结构中配置错误,或者我在这一切的某个地方犯了一个菜鸟错误。自从我遵循的说明发布以来,发生了什么变化?我在#clojure irc 日志中找到了几个关于这个问题的引用,但没有解决方案。
最后,这是一个简短的目录树供参考:
├── out
│ ├── cljs
│ │ ├── core.cljs
│ │ └── core.js
│ ├── clojure
│ │ └── browser
│ │ ├── event.cljs
│ │ ├── event.js
│ │ ├── net.cljs
│ │ ├── net.js
│ │ ├── repl.cljs
│ │ └── repl.js
│ └── goog
│ └── [...]
├── pom.xml
├── project.clj
├── resources
│ └── public
│ ├── brepl-hello.js
│ └── index.html
├── src
│ ├── clj
│ │ └── brepl_hello
│ │ └── core.clj
│ └── cljs
│ └── brepl_hello
│ └── brepl-hello.cljs
└─── target
├── brepl-hello-0.1.0-SNAPSHOT.jar
├── classes
├── cljsbuild-compiler-0
│ ├── brepl_hello
│ │ └── brepl-hello.js
│ ├── cljs
│ │ ├── core.cljs
│ │ └── core.js
│ └── clojure
│ └── browser
│ ├── event.cljs
│ ├── event.js
│ ├── net.cljs
│ ├── net.js
│ ├── repl.cljs
│ └── repl.js
└── stale
└── extract-native.dependencies