webpack-dev-server 中 inline 和 HMR 的區別

Molin發表於2017-06-12

webpack-dev-server

webpack-dev-server是一個小型的node.js Express伺服器,它使用webpack-dev-middleware中介軟體來為通過webpack打包生成的資原始檔提供Web服務。它還有一個通過Socket.IO連線著webpack-dev-server伺服器的小型執行時程式。webpack-dev-server傳送關於編譯狀態的訊息到客戶端,客戶端根據訊息作出響應

簡單來說,webpack-dev-server就是一個小型的靜態檔案伺服器。使用它,可以為webpack打包生成的資原始檔提供Web服務

inline和hot的功能上的區別

hot

webpac-dev-server支援Hot Module Replacement,即模組熱替換,在前端程式碼變動的時候無需整個重新整理頁面,只把變化的部分替換掉。

inline

inline選項會為入口頁面新增“熱載入”功能,即程式碼改變後重新載入頁面。

// 1. 不會重新整理瀏覽器
$ webpack-dev-server
//2. 重新整理瀏覽器
$ webpack-dev-server --inline
//3. 重新載入改變的部分,不會重新整理頁面
$ webpack-dev-server --hot
//4. 重新載入改變的部分,HRM失敗則重新整理頁面
$ webpack-dev-server  --inline --hot複製程式碼

⚠️經測試在webpack2中使用inline和hot都不需要在配置時(webpack.config.js中)新增引數為true,即下面的程式碼是多餘的

devServer: {
    contentBase: path.resolve(__dirname, './src'),
    port: 1024,
    hot: true,        // 不需要
    inline: true,     // 不需要
},複製程式碼

inline和hot使用上的區別

inline

只需在命令列加入--line選項即可。例如:

webpack-dev-server --inline複製程式碼

hot

  1. 需要在命令列加入--hot選項:

    webpack-dev-server --hot複製程式碼
  2. 需要在入口處加上如下程式碼

    if(module.hot){
     module.hot.accept()
    }複製程式碼

可以在控制檯看到如下輸出:

[HMR] Waiting for update signal from WDS...
[WDS] Hot Module Replacement enabled.複製程式碼

對chunkhash和hash的支援

webpack的hash欄位是根據每次編譯compilation的內容計算所得,也可以理解為專案總體檔案的hash值,而不是針對每個具體檔案的。

chunkhash是根據模組內容計算出的hash值。

當使用--hot引數時,只能使用hash,如果使用chunkhash會報錯:

output: {
    path: path.resolve(__dirname, './output'),
    // filename: '[name].[chunkhash:8].bundle.js',      // 會報錯
    filename: '[name].[hash:8].bundle.js',
},複製程式碼

在使用--inline時,hash和chunkhash都可以使用。

示例程式碼

示例程式碼

相關文章