2016-02-28 28 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被配置爲觀察正確的目錄。