ClojureScriptブラウザREPLに接続しようとしていますが、問題が発生していclojure.browser.repl/connect
ます。コンパイルされたJavaScriptは、上部のGoogleClosureコードのブロックにあるオブジェクトTypeError
を呼び出そうとします。ClojureScript:Up and Running(第9章、p.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>
私はこれをポート3000でREPLまたはPythonSimpleHTTPServerのRing/Jettyを使用して提供してきました。Chromeでこのページを開くと、開発コンソールにが表示され、コンパイルされたjsファイルの上部にあるGoogleClosureコードのthis /ブロック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!")
コンパイルしてブラウザで問題なく実行できます。ビルド設定またはディレクトリ構造で何かが正しく構成されていないか、これらすべてのどこかでnoobの間違いを犯しているのではないかと思います。私が従う指示が公開されてから何が変わったのですか?#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