我正在尝试在浏览器中启动ClojureScript REPL。理想情况下我还不想使用奥斯汀:我首先想让最简单的REPL工作。
我尝试过各种教程,到目前为止我没有设法让它工作。基本上我不明白人们说:“启动ClojureScript浏览器REPL”时的意思。
到目前为止,我做到了:
lein new mies hellow
和
lein cljsbuild auto hellow
这是我的core.js文件:
(ns hellow.core
(:require [clojure.browser.repl :as repl]))
(enable-console-print!)
(println "Hello world!")
(. js/console (log "Hello again"))
(repl/connect "http://localhost:9000/repl")
(. js/console (log "Ah, this prints too"))
当我打开 index.html (调用core.js)时,我可以在Chrome的开发者工具的JavaScript控制台中看到所有内容都已正确记录。
然而(repl/connect ...)
显然失败了。以下是Chrome的开发者工具显示的内容;
Failed to load resource http://localhost:9000/repl?xpc=%7B%22cn%22%...
在关于ClojureScript的几乎所有论坛帖子/博客文章/教程中,我都读过这个主题,我偶然发现了一句话:“启动浏览器REPL”或类似的东西。
如何启动浏览器REPL?这是在从浏览器加载 index.html 之前必须完成的事情吗?
我可以从Emacs启动此浏览器REPL吗?
如何在不加载 index.html / core.js 的情况下测试浏览器REPL是否正常工作?
如何在浏览器中加载 index.html / core.js 之后验证(repl / connect ...)在中的内容> core.js 确实有效并且实际连接到REPL?
答案 0 :(得分:6)
启动repl服务器的最简单,最基本的方法(你已经包含了客户端代码)正在进行
$ lein trampoline cljsbuild repl-listen
Running ClojureScript REPL, listening on port 9000.
To quit, type: :cljs/quit
ClojureScript:cljs.user>
此时,如果您尝试eval任何表达式,例如(+ 1 2)
,您将看到repl挂起,因为它没有eval的环境。
当你转到index.html时(记得从网络服务器提供服务,或连接失败,不要使用file:///
网址)并打开它在浏览器上。
与http://localhost:9000/repl?xpc=...
的连接应该可以正常工作,并且repl应该取消阻止并打印3
。从那时起,任何命令都将在浏览器环境中执行。
我想尝试(js/alert "hi")
查看repl是否已连接,如果有效,它将在浏览器窗口中显示alert
。
请记住,浏览器窗口是您的执行环境,因此如果您刷新它,您将丢失运行时值,如果您不再次定义它们,则无法从repl访问它们。
使用cljsbuild还有:(lein cljsbuild help
)
repl-listen
Run a REPL that will listen for incoming connections. (the one I used above)
repl-launch
Run a REPL and launch a custom command to connect to it.
repl-rhino
Run a Rhino-based REPL (JVM based JS execution environment, no browser needed).
另外,对于准系统repl,将它与rlwrap一起使用以获取readline快捷键(Ctrl + a等)和repl历史记录等很有用:
$ rlwrap lein trampoline cljsbuild repl-listen
我希望这一切都有所帮助。