根据我的理解,运行lein figwheel
在端口3449的后台启动一个简单的静态托管服务器(通过环)。这适用于我的系统。
问题是我通过端口3000
上的node.js托管我自己的文件。当我运行figwheel,然后启动我的express.js服务器时,更改我的前端文件奇怪地影响两个端口相同(即,更新文件会导致两个页面立即重新渲染)。
问题:但是如果figwheel对express.js端口3000
服务器一无所知,那怎么可能呢?而且,无论如何,这是使用我自己的快递服务器的最佳方式(即,有两个实例运行,一个默认为3449,我自己的端口为3000)?
答案 0 :(得分:2)
该页面正在运行使用ClojureScript构建的javascript。构建包括figwheel客户端代码。来自figwheel客户端的代码打开到预定义位置的websocket连接。托管页面的位置无关紧要,javascript将尝试连接到预定义的websocket端点。因此,如果您在3000上从服务器加载页面,websocket仍然建立到您使用lein figwheel
创建的服务器进程。重要的是有图形客户端代码和图形服务器。当文件发生变化时,图形服务器正在观察文件系统并告诉任何websocket连接。 figwheel客户端只是连接到一个已知的websocket并监听重新加载工件的指令。因此,您不需要像已经发现的那样使用figwheel来提供静态内容。
至于“这是最好的方式吗?”那么它完全取决于你的目标。当然它运作得很好,所以如果运行两者都有一些优势,那就去吧!另一方面,如果你不需要它,为什么要运行快速服务器呢?
运行2台服务器有利的一种情况是,当您依赖服务器端功能时,使用figwheel作为主机是不合适的。这可能是由于部署(可能你不想使用环处理程序作为主服务器),或技术限制(我喜欢使用httpkit作为websockets,而afaik没有一种很好的方法来运行这些一个环处理程序)。但是,正如您所指出的,即使您没有使用它来提供文件或服务,您仍然可以使用figwheel进行快速开发重新加载。
显然,图形服务器需要正在观看正确的文件,因此请确保将figwheel配置为观察正确的目录。