2013-07-18 38 views
25

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

事情我已经尝试:

我试着用Cemerick的piggieback并捎带上nREPL。我真的不知道如何从文档中配置它。在弄清楚我必须在项目文件夹的根目录中创建一个index.html文件后,我才得以开始工作。除了服务器不提供我的资产。

我试着用Clojurescript wiki中的bash脚本设置inferior-lisp。但是,每当我尝试运行劣等lisp程序时,我都会收到“错误的类型参数:stringp,nil”。

这里是我理想中的工作流程:

我有一个项目文件夹/资源/公众有我的资产和HTML文件的文件夹。我可以启动一个Web服务器,以某种方式为这些文件提供服务,无论是通过环或使用python简单的http服务器。我可以通过emacs连接到REPL并评估表单。

+1

我建议https://github.com/magomimmo/modern-cljs。它向您展示了如何实现您理想的工作流程,甚至包括用于服务您的公共资产的Python单线程。轻松获得最好的cljs资源之一。 – danneu

回答

20

Cemerick更换元标记的教程后,再次拯救:奥斯汀(https://github.com/cemerick/austin)正是你所追求的。

Austin提供了两种选择:在浏览器中评估JS的REPL(“项目REPL”)或更完整的集成浏览器连接REPL。听起来好像后者就是你想要的,你需要为它的文档挖掘一点点:https://github.com/cemerick/austin/tree/master/browser-connected-repl-sample

为了让浏览器连接的REPL能够工作,查斯的例子非常简单,可以归结为:

  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. 从Clojure的转动nREPL会话到ClojureScript REPL与
    (cemerick.austin.repls/cljs-repl repl-env)
  4. 连接到您的仍在运行的环服务器应用程序与浏览器,你应该连接。
    (.alert js/window "Hi!")应该证明它。
  5. 使用标准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)))