2016-02-28 55 views
1

运行lein figwheel运行FIgwheel,从我的理解,启动在端口3449.一个简单的静态主机服务器(通过环)幕后这工作我的系统上。与Express.JS

的问题是,我在端口3000通过node.js的托管我自己的文件。当我运行figwheel,然后启动我的express.js服务器时,更改我的前端文件奇怪地影响两个端口相同(即更新文件会导致两个页面立即重新渲染)。

问题:但是,如果figwheel不知道有关express.js端口3000服务器的任何信息,这怎么可能?而且,无论如何,这是使用我自己的快递服务器使用figwheel的最佳方式(即,有两个实例在运行,一个默认为3449,而我自己的端口为3000)?

+0

figwheel未运行“静态宿主服务器”,它通过websocket进行通信,并使用该数据通过其客户端代码更新前端 – noisesmith

回答

2

该页面正在运行由ClojureScript构建的JavaScript。构建包括方轮客户端代码。来自飞轮客户端的代码打开websocket连接到预定义的位置。无论页面托管在哪里,javascript都会尝试连接到预定义的websocket端点。因此,如果您在3000上从服务器加载页面,那么WebSocket仍会建立到您使用lein figwheel创建的服务器进程。重要的一点是有图轮客户端代码和图轮服务器。 figwheel服务器正在监视文件系统并在文件更改时告诉任何websocket连接。 figwheel客户端只是连接到一个已知的websocket并监听指令来重新载入工件。因此,您不需要使用figwheel来为静态内容提供服务,就像您已经发现的那样。

至于“这是最好的方式吗?”那完全取决于你的目标。当然,它的效果很好,所以如果运行两者都有一些优势,那就去吧!另一方面,如果你不需要它,为什么要运行一个快速服务器呢?

一种情况下,其中运行2台服务器的优点是,当你是靠不使用figwheel作为主机合身服务器端功能。这可能是由于部署(也许你不想使用响铃处理程序作为主服务器)或技术限制(我喜欢为websocket使用httpkit,并且afaik没有一种很好的方式来从一个戒指处理程序)。但是,正如您所指出的那样,即使您不使用它来提供文件或服务,您仍然可以使用figwheel进行快速开发重新加载。

很明显,figwheel服务器需要注意正确的文件,所以请确保figwheel被配置为观察正确的目录。