完整的Clojure堆栈:如何在开发过程中同时获得浏览器REPL和服务器REPL

3
我正在开发我的第一个全栈Clojure应用程序。在Linux Mint中,我已经成功地运行了以下内容:
  • leiningen
  • figwheel + garden[auto] = 交互式单页应用程序(SPA)开发,支持热代码和CSS重新加载
  • 使用rebel-readline的leiningen REPL用于服务器,可以在REPL上启动服务器,并将SPA提供给浏览器
  • leiningen uberjar编译成功,jar文件可以运行,服务器提供了SPA
但我无法找到一种方法来设置一个既有服务器REPL又有SPA REPL的开发环境,以便我可以集成sente支持WebSocket并监视SPA REPL中的re-frame app-db状态。理想情况下,我想通过sente WebSocket实现SPA与服务器之间的通信,同时运行figwheel + garden [auto]。
2个回答

0

我的回答可能不是你所问的,但我认为它仍然会引起你的兴趣,请耐心听我说。

你试过lightmod编辑器吗?它旨在成为一个具有最小设置的全栈编辑器。实际上,当你启动它时,你可以预先选择项目模板,并自动获得后端的REPL和SPA的REPL,带有自动重新加载等功能。它没有所有Emacs的好处,但我发现它非常适合快速设置。


1
我已经尝试过LightMod。它正好符合我的需求。我从Github上下载了它,研究了它的源代码,但是我还没有弄清楚它是如何同时提供服务器和客户端REPL的。 - user2592857
尝试阅读了一下,但这远超出了我目前在Clojure中所能处理的范围。也许可以直接向Zach Oakes发送消息询问他的意见? - Julien Rousé

0
原来在 ClojureScript 应用中使用的 sente 函数,名为 make-channel-socket!,用于初始化连接回到运行在应用程序服务器上的 sente-websocket-server,它有第三个参数 options map,其键名为:host。默认情况下,sente 将 :host 值设置为加载 ClojureScript 应用程序的服务器。
如果通过 'lein figwheel' 运行并通过 figwheel 服务器加载 ClojureScript 应用程序,则默认情况下 sente 尝试连接到 figwheel 服务器,当然,该服务器不会运行 sente websocket 服务器。
对于开发模式,必须: 1. 在终端中启动应用程序服务器(例如,'lein repl') 2. 使用 'localhost:' 的 :host 值编译 ClojureScript 应用程序 3. 在另一个终端上使用 figwheel 运行 ClojureScript 应用程序 4. 从浏览器连接到 figwheel 服务器(例如,'localhost:3449')
当通过 figwheel 服务器将 ClojureScript 应用程序加载到浏览器中时,它执行 sente 连接调用,现在将连接到运行在应用程序服务器中的 sente websocket 服务器。

这太棒了!现在可以同时使用带有浏览器REPL的figwheel和带有REPL的应用程序服务器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接