我已经在网上,谷歌等网站上找到了答案。但是我找不到任何可以帮助我完成我正在尝试的东西的事情:
这是场景- 我已经在运行一个码头服务器实例并提供包括打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可以处理码头已经提供的内容
答案 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/;
}
}