如何使用emacs设置Clojurescript REPL?

Chr*_*Bui 25 read-eval-print-loop clojurescript

我正在尝试为Clojurescript设置一个环境.我遇到的问题是不知道如何设置它以便我可以从emacs连接到Clojurescript Browser REPL,因此我可以直接从编辑器评估表单并将其显示在浏览器中.

我试过的事情:

我尝试使用Cemerick的piggieback并搭载nREPL.我真的不知道如何从文档中配置它.在弄清楚我必须在项目文件夹的根目录中创建一个index.html文件后,我才能使它工作.除了服务器不提供我的资产.

我尝试使用Clojurescript wiki中的bash脚本设置inferior-lisp.但是,每当我尝试运行劣质lisp程序时,我都会遇到"错误的类型参数:stringp,nil".

这是我理想的工作流程:

我有一个项目文件夹/ resources/public文件夹,其中包含我的资产和html文件.我可以通过响铃或使用python的简单http服务器启动一个以某种方式提供这些文件的Web服务器.我可以从emacs连接到REPL并将表单评估到其中.

Ian*_*Ian 20

Cemerick再次拯救:奥斯汀(https://github.com/cemerick/austin)正是你所追求的.

Austin为您提供了两个选项:在浏览器中评估JS的REPL("项目REPL"),或者更完整,集成的浏览器连接的REPL.听起来后者就是你所追求的,你需要更加努力地学习它的文档:https://github.com/cemerick/austin/tree/master/browser-connected-repl-sample

为了使浏览器连接的REPL正常工作,Chas的例子非常简单,可归结为:

  1. 添加一些中间件或模板魔术来将JS脚本元素附加到HTML页面,并且该脚本需要包含输出 (cemerick.austin.repls/browser-connected-repl-js)
  2. 启动nREPL,启动环服务器,然后
    (def repl-env (reset! cemerick.austin.repls/browser-repl-env (cemerick.austin/repl-env)))
    创建REPL环境.
  3. 将nREPL会话从Clojure转换为ClojureScript REPL
    (cemerick.austin.repls/cljs-repl repl-env)
  4. 使用浏览器连接到仍在运行的Ring服务器应用程序,您应该连接.
    (.alert js/window "Hi!")应该证明.
  5. 使用标准的Emacs nREPL命令将按预期工作,将ClojureScript编译为JavaScript并将其发送到浏览器进行评估.

Piggieback和Austin之间的主要区别在于第一步和第二步:中间件使用atom来添加连接回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)))
Run Code Online (Sandbox Code Playgroud)