Cemerick 再次进行救援:Austin ( https://github.com/cemerick/austin ) 正是您所追求的。
Austin 为您提供了两种选择:要么是在浏览器中评估 JS 的 REPL(“项目 REPL”),要么是更完整、集成的与浏览器连接的 REPL。听起来后者是你所追求的,你需要更努力地挖掘它的文档:https ://github.com/cemerick/austin/tree/master/browser-connected-repl-sample
为了让浏览器连接的 REPL 正常工作,Chas 的示例非常简单易懂,归结为:
- 添加一些中间件或模板魔术来将 JS 脚本元素附加到您的 HTML 页面,并且该脚本需要包含
(cemerick.austin.repls/browser-connected-repl-js)
- 启动 nREPL,启动你的环服务器,然后
(def repl-env (reset! cemerick.austin.repls/browser-repl-env (cemerick.austin/repl-env)))
创建一个 REPL 环境。
- 将 nREPL 会话从 Clojure 转换为 ClojureScript REPL
(cemerick.austin.repls/cljs-repl repl-env)
- 使用浏览器连接到您仍在运行的 Ring 服务器应用程序,您应该已连接。
(.alert js/window "Hi!")
应该证明。
- 使用标准 Emacs nREPL 命令将按预期工作,将 ClojureScript 编译成 JavaScript 并将其发送到浏览器进行评估。
Piggieback 和 Austin 之间的主要区别在于第一步和第二步:中间件使用原子添加连接回 nREPL 的内联 JavaScript 块。由于 HTTP URL 是在运行时确定的,因此 Ring 服务器和客户端 JavaScript 需要协同工作。
FWIW 我在我的user
命名空间中创建了一个函数来加速连接 CLJS REPL:
(defn cljs-browser-repl
"Fire up a browser-connected ClojureScript REPL"
[]
(let [repl-env (reset! cemerick.austin.repls/browser-repl-env
(cemerick.austin/repl-env))]
(cemerick.austin.repls/cljs-repl repl-env)))