如何设置figwheel-main重新加载clojure后端提供的代码

时间:2019-06-27 01:22:47

标签: clojure clojurescript figwheel

我已经在网上,谷歌等网站上找到了答案。但是我找不到任何可以帮助我完成我正在尝试的东西的事情:

这是场景- 我已经在运行一个码头服务器实例并提供包括打ic生成的html在内的内容的Clojure代码。

我已将clojurescript添加到混合物中以使用试剂作为前端使用。 例如。 Jetty服务的页面具有div id =“ app”,试剂编译的app.js为此重写了dom。

到目前为止,一切正常。.我已配置lein运行clojure代码,并将clojurescript代码构建到app.js中,并将其放在我的lein配置中的资产路径中。

现在,我正在尝试使用figwheel-main ..来热加载此app.js代码。但是我什么也没得到。使用figwheel-main,它会打开一个单独的浏览器URL,该URL可以热加载内容。.但是它未连接到提供内容的clojure后端。即figwheel-main在localhost:9500上显示clojurescript代码,而jetty在端口3000上运行。

当我修改clojurescript代码时,我希望能够看到码头实例提供的app.js的热重装。

我不知道该怎么做。

我尝试了figwheel-main教程-i.e中的配置 deps.edn等,但无法弄清楚如何将其与现有 clojure代码。

value

我希望figwheel-main可以处理码头已经提供的内容

2 个答案:

答案 0 :(得分:2)

请记住,您现在正在运行 两个 程序,一个在浏览器中的CLJS中运行,另一个在后端的CLJ中运行。它们通过网络进行通信,从而增加了复杂性。

如果您已经在CLJS代码中使用了Reagent,则应在此处添加打ic(作为Reagent组件),而不是在背面。

如果您在后端有数据,请通过AJAX调用从后端CLJ代码中获取数据,然后通过打ic,SVG等在前端将其呈现。我们使用大型的CLJ + CLJS应用程序来实现此目的,只能通过AJAX调用(基本上是异步子例程调用)访问后端代码。

答案 1 :(得分:0)

一个选择可能是在开发过程中运行一个Web服务器(例如Nginx在端口9000上监听),以掩盖Figwheel和Jetty运行的不同端口。

您可以通过将请求转发到端口3449上的Figwheel并将位置/转发到端口3000上的Jetty(将后端由Jetty服务)配置为Nginx为静态文件提供位置/api

在开发过程中,您将连接到端口9000,看起来一切都在该端口上运行。我不确定的一件事是Figwheel使用的websocket,但是值得尝试。

您可以在Nginx文档中查找示例:https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/,但示例配置如下所示:

server {
  listen 9000;
  listen [::]:9000;

  location / {
      proxy_pass http://localhost:3449/;
  }

  location /api {
      proxy_pass http://localhost:3000/;
  }

}