【问题标题】:How do I setup a Clojurescript REPL with emacs?如何使用 emacs 设置 Clojurescript REPL?
【发布时间】:2013-07-16 20:25:48
【问题描述】:

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

我尝试过的事情:

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

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

这是我理想的工作流程:

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

【问题讨论】:

  • 我推荐github.com/magomimmo/modern-cljs。它向您展示了如何实现理想的工作流程,甚至包括用于服务公共资产的 Python 单线。轻松成为可用的最佳 cljs 资源之一。
  • 尊敬的 2018 年读者:请查看 Figwheel (figwheel.org),或查看我在底部的回答。拥有一个连接浏览器的 REPL 变得更简单了!

标签: read-eval-print-loop clojurescript


【解决方案1】:

按照https://github.com/clojure/clojurescript/wiki/Quick-Start上的教程后我遇到了类似的问题

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

将 index.html 中的 meta 标签替换为

<meta content="text/html;charset=UTF-8" http-equiv="content-type">

【讨论】:

    【解决方案2】:

    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 的示例非常简单易懂,归结为:

    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. 使用
      (cemerick.austin.repls/cljs-repl repl-env) 将 nREPL 会话从 Clojure 转换为 ClojureScript REPL
    4. 使用浏览器连接到您仍在运行的 Ring 服务器应用,您应该可以连接。
      (.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)))
    

    【讨论】:

      【解决方案3】:

      使用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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-17
        • 2012-05-15
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多