webpack-dev-server支持2種自動刷新的方式:javascript
iframe
,將咱們本身的應用注入到這個iframe
當中去。live.bundle.js
文件,其不但建立了iframe
標籤,同時包含socket.io
的client
代碼,以和webpack-dev-server
進行websocket
通信,從而完成自動編譯打包、頁面自動刷新的功能。Iframe mode
下,瀏覽器訪問的路徑是:html
localhost:8080/webpack-dev-server/index.html。
這個時候這個頁面的header部分會出現整個reload
消息的狀態。當源文件改變的時候,便可以完成自動編譯打包、頁面自動刷新的功能。前端
當使用Iframe mode
時,請求/webpack-dev-server/index.html
路徑時,會返回client/index.html
文件,這個文件的內容就是:java
<!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"/> <script type="text/javascript" charset="utf-8" src="/__webpack_dev_server__/live.bundle.js"></script> </head> <body></body> </html>
可看出,這個頁面會請求live.bundle.js
文件,該文件裏面會新建一個Iframe
,你的應用就被注入到了這個Iframe
當中。webpack
同時live.bundle.js
中含有socket.io
的client
代碼,這樣它就能和webpack-dev-server
創建的http server
進行websocket
通信了。並根據返回的信息完成相應的動做。web
socket.io
的client
代碼被打包進了你的包(bundle
)中,以此來與webpack-dev-server
進行websocket
通信,從而完成自動編譯打包、頁面自動刷新的功能。bundle
文件很臃腫。使用inline mode
的時候,這個時候訪問的路徑是:瀏覽器
localhost:8080/index.html
Inline mode
也能完成自動編譯打包、頁面自動刷新的功能,可是頁面沒有header部分的reload
消息的顯示,不過在控制檯中會顯示reload
的狀態。websocket
Inline-mode
,是webpack-dev-server
會在你的webpack.config.js
的入口配置文件中再添加一個入口,app
module.exports = { entry: { app: [ 'webpack-dev-server/client?http://localhost:8080/', './src/js/index.js' ] }, output: { path: './dist/js', filename: 'bundle.js' } }
這樣就完成了將inlined.js
打包進bundle.js
裏的功能,同時inlined.js
裏面也包含了socket.io
的client
代碼,能夠和webpack-dev-server
進行websocket
通信。socket
固然你也能夠直接在你index.html引入這部分代碼:
<script src="http://localhost:8080/webpack-dev-server.js"></script>
Iframe mode
和Inline mode
最後達到的效果都是同樣的,都是監聽文件的變化,而後再將編譯後的文件推送到前端,完成頁面的reload
的。devServer.inline
切換兩種模式,默認爲inline
模式。inline mode
。