ClojureScript REPL 通过 austin 如何与 SlimerJS 和 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窗口也打开了,其中一个显示"SlimerJS"。关闭这些火狐窗口似乎没有任何效果。

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

故事的简短版本:

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

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

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

相关内容

最新更新