1

我是一个 ClojureScript 新手,在 Windows 机器上使用 emacs、cider、cljsbuild 和 austin 以及 slimerjs。我注意到当我启动 clojurescript repl 时,消息

Browser-REPL ready @ http://localhost:xxxx/yyyy/repl/start

出现,如果我将浏览器(例如 Chrome)指向那里,则可以看到 appendChild 或 js/alert 等功能的副作用。两个 Firefox 窗口也打开了,其中一个显示“SlimerJS”。关闭这些 Firefox 窗口似乎没有任何效果。

有人可以向我解释一下 ClojureScript REPL、SlimerJS 和我的其他浏览器 (Chrome) 连接到的 Browser-REPL 的幕后情况吗?

4

1 回答 1

2

故事的简短版本:

  1. 当页面加载时,脚本正在使用长轮询连接到您的 ClojureScript REPL 后端(对于某些 REPL,使用 Web 套接字)。
  2. 只要您在 REPL 中执行操作,代码就会被转换为 JavaScript 并发送到浏览器(通过步骤 #1 中的连接)。
  3. 第 2 步中的代码在浏览器中执行,结果连同其他信息(状态、类型等)一起发送回 REPL。

您可以在 Chrome 开发工具(或用于不同浏览器的类似工具)中监控网络选项卡上的流量时观察所有这些行为。

不确定 SlimerJS,但 PhantomJS(它们与我看到的非常相似)在这种情况下将扮演上图中浏览器的角色。它托管并运行翻译后的 JavaScript 代码。原则上,托管在 Node JS 上的服务器端 ClojureScript 代码也是如此。

于 2015-01-30T22:08:00.673 回答