如何使用emacs设置Clojurescript REPL?

时间:2013-07-18 03:38:08

标签: 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并将表单评估到其中。

3 个答案:

答案 0 :(得分: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并将其发送到浏览器进行评估。
  6. 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)))
    

答案 1 :(得分:2)

在按照https://github.com/clojure/clojurescript/wiki/Quick-Start

上的教程后,我遇到了类似的问题

帮助我的是最后一个建议 https://groups.google.com/forum/#!topic/clojure/_JWvqc3fENQ

使用

替换index.html中的元标记
<meta content="text/html;charset=UTF-8" http-equiv="content-type">

答案 2 :(得分:1)

使用Figwheel main,设置实时重新加载,连接浏览器的REPL变得更加简单。 Figwheel.main会在您更改Clojurescript源时对其进行编译,并允许在浏览器中评估代码。

  1. deps.edn中定义依赖项。 :paths指定用于查找源代码的文件夹。

    {:deps {org.clojure/clojure {:mvn/version "1.9.0"}
            org.clojure/clojurescript {:mvn/version "1.10.339"}
            com.bhauman/figwheel-main {:mvn/version "0.1.9"}}
     :paths ["src"]}
    
  2. dev.cljs.edn中定义您的应用程序入口点。在这里,“ dev”成为构建名称。

    {:main example.core}
    
  3. src/example/core.cljs中创建一些ClojureScript代码。

    (ns example.core)
    
    (let [msg "Change msg in src/example/core.cljs and see what happens!"]
      (js/alert msg))
    
  4. 启动REPL。

    • 要使用Emacs:
      1. 运行M-x cider-jack-in-clojurescript
      2. 选择figwheel-main作为构建目标
      3. :dev设置为您的内部版本名称。
    • 使用终端:
      1. 运行clojure -m figwheel.main -b dev -r-b dev设置构建,-r在加载时启动REPL。

有关更多信息,请参阅Figwheel's well-made documentation