【问题标题】:Starting the ClojureScript browser REPL启动 ClojureScript 浏览器 REPL
【发布时间】:2014-09-21 18:35:45
【问题描述】:

我正在尝试在浏览器中启动 ClojureScript REPL。理想情况下,我还不想使用 Austin:我首先想让最简单的 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?

【问题讨论】:

  • 看看无花果和栗子。这些将使启动浏览器 repl 更容易

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


【解决方案1】:

启动repl服务器的最简单最基本的方法(你已经包含了客户端代码)正在做

$ lein trampoline cljsbuild repl-listen
Running ClojureScript REPL, listening on port 9000.
To quit, type: :cljs/quit
ClojureScript:cljs.user>

此时,如果您尝试评估任何表达式,例如 (+ 1 2),您将看到 repl 挂起,因为它没有要评估的环境。

那是当你转到你的 index.html 时(记得从网络服务器提供它,否则连接会失败,不要使用 file:/// 网址)并在浏览器。

http://localhost:9000/repl?xpc=... 的连接应该可以正常工作,并且repl 应该取消阻止并打印3。从此以后,任何命令都将在浏览器环境中执行。

我喜欢尝试(js/alert "hi") 来查看repl 是否已连接,如果可以,它将在浏览器窗口中alert hi。

请记住,浏览器窗口是您的执行环境,因此如果您刷新它,您将丢失运行时值,并且如果您不重新定义它们,它们将无法从 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2018-06-07
    • 1970-01-01
    • 2012-05-15
    • 2016-01-24
    相关资源
    最近更新 更多