【问题标题】:Full-Stack Clojure: How to get a Browser REPL and a Server REPL simultaneously during development全栈 Clojure:如何在开发过程中同时获取浏览器 REPL 和服务器 REPL
【发布时间】:2019-06-22 21:10:54
【问题描述】:

我正在开发我的第一个全栈 Clojure 应用程序。我已经设法在 Linux Mint 中正常工作:

  • 莱宁根
  • figwheel + garden[auto] = 使用热代码和 CSS 重新加载的交互式 SPA 开发
  • leiningen REPL for Server with rebel-readline,在 REPL 启动服务器, 并将 SPA 提供给浏览器
  • leiningen uberjar 编译,jar 文件运行,SPA 由 服务器

我不知道该怎么做是设置一个允许我同时拥有服务器 REPL 和 SPA REPL 的开发环境,以便我可以集成 sente 以获得 websocket 支持并监控重新SPA REPL 中的框架 app-db 状态。我想,理想情况下,我想让 figwheel + gargen[auto] 与 SPA 一起运行,通过 sente websocket 与服务器通信。

【问题讨论】:

    标签: clojure read-eval-print-loop re-frame figwheel sente


    【解决方案1】:

    事实证明,ClojureScript 应用程序中使用的名为 make-channel-socket! 的 sente 函数被调用以启动与运行在应用程序服务器上的 sente-websocket-server 的连接,它具有第三个参数选项映射,键名为:主机。默认情况下,sente 将 :host 值设置为加载 ClojureScript 应用程序的服务器。

    如果运行 'lein figwheel' 并通过 figwheel 服务器加载 ClojureScript 应用程序,则默认情况下,sente 会尝试连接到 figwheel 服务器,这当然不是运行 sente websocket 服务器。

    对于开发模式,必须: 1. 在终端中启动应用服务器(例如,'lein repl') 2. 使用 :host 值为 'localhost:' 编译 ClojureScript 应用程序 3. 在另一个终端中通过 figwheel 运行 ClojureScript 应用程序 4. 从浏览器连接到figwheel服务器(例如,'localhost:3449')

    当 ClojureScript 应用程序通过 figwheel 服务器加载到浏览器中时,它会执行 sente 连接调用,该调用现在与运行在应用程序服务器中的 sente websocket 服务器建立连接。

    这太棒了!现在,可以使用 figwheel 及其 REPL 用于浏览器,并同时运行应用服务器及其 REPL。

    【讨论】:

      【解决方案2】:

      我的回答并不是你真正想要的,但你可能会感兴趣,但我相信请耐心等待。

      您尝试过lightmod 编辑器吗?它旨在成为具有最少设置的全栈编辑器。事实上,当你启动它时,你可以为你的项目预选模板,并自动为后端获取一个 REPL,为你的 SPA 获取一个 REPL,自动重新加载等。它没有 Emacs 的所有好东西,但我发现它真的很好快速设置。

      【讨论】:

      • 我已经尝试过 LightMod。它正是我想要做的。我从 github 上下载了它,研究了它的源代码,但我一直无法弄清楚它是如何同时提供服务器和客户端 REPL 的。
      • 也尝试阅读它,但它超出了我现在在 Clojure 中可以处理的范围。也许给 Zach Oakes 发消息直接问他?
      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多