2015-10-28 175 views
42

我正在按照一些教程來構建一個具有express的同構應用程序並作出反應。我對webpack-dev-server感到困惑。我是否需要webpack-dev-server如果我正在使用像express一樣的節點服務器

的的WebPack教程說有關的WebPack-dev的服務器:

此結合本地主機上一個小Express服務器:8080供應你的靜態資產,以及捆綁(自動編譯)。

它重新編譯包時會自動更新瀏覽器頁面(socket.io)。在您的瀏覽器中打開http://localhost:8080/webpack-dev-server/bundle

由於我有express服務器,我真的需要webpack-dev-server嗎?或者使用它的優點和缺點是什麼?如果我想使用react-hot-loader,那麼webpack-dev-server是否必需?

回答

54

由於我有快遞服務器,我真的需要webpack-dev-server嗎?

是和否。您可以使用混合方法,它基本上將webpack-dev-server設置爲代理。您的快遞服務器提供除資產以外的所有服務。如果它是一項資產,請求將被轉發/代理到webpack-dev-server。一看便知此處瞭解詳情:How to allow for webpack-dev-server to allow entry points from react-router

或者,你可以使用webpack-dev-middlewarewebpack-hot-middleware,而是如果你不想來處理所有繁瑣的代理邏輯,並且具有運行2臺服務器。看到這裏的例子:https://github.com/glenjamin/webpack-hot-middleware/blob/master/example/server.js

使用它的優點和缺點是什麼?

實時重新加載和熱模塊更換。非常有用的功能在我看來

如果我想使用react-hot-loader,是否需要webpack-dev-server?

不,它可以在Webpack的hot module replacement interface之上工作。如果您願意,您可以創建自己的「熱點服務器」。 webpack-dev-server客戶端只需監聽socket.io進行熱更新並調用postMessage(https://github.com/webpack/webpack-dev-server/blob/8e8f540b2f7b35f7b6c3ce616a7fd2215aaa6eea/client/index.js#L64-L67),然後由服務器https://github.com/webpack/webpack/blob/bac9b48bfb0f7dd9732f2faafb43ebb22ee2a2a7/hot/only-dev-server.js#L59-L67接收。

或者我建議您可以使用上面提到的webpack-dev-middleware和webpack-hot-middleware。這樣,您不必擔心代理邏輯​​,您可以輕鬆地將熱重新加載到現有快速服務器中,而無需使用webpack-dev-server

+0

Thx!那麼我能說使用react-hot-loader的最佳做法是使用你提到的中間件嗎?如果考慮生產環境怎麼辦?我不認爲我需要在那裏重新加載,對吧?那麼我應該刪除中間件代碼嗎? –

+0

react-hot-loader正在貶值,所以我會考慮https://github.com/gaearon/react-transform-hmr(它由同一作者)。是的,你不需要live-reloading生產,所以在你的server.js中,我只是有條件地檢查env。如果是開發,請使用中間件。別的,只是略過。 – trekforever

+0

Thnx。我已經接受了這個答案。 –

相關問題