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