启动ClojureScript浏览器REPL

时间:2014-09-21 18:35:45

标签: browser emacs read-eval-print-loop clojurescript

我正在尝试在浏览器中启动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?

1 个答案:

答案 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

我希望这一切都有所帮助。