通过 austin 的 ClojureScript REPL 如何与 SlimerJS 和 Browser-REPL 交互?

How does the ClojureScript REPL via austin interact with SlimerJS and the Browser-REPL?

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

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

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

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

故事的简短版本:

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

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

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