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
需要在命令列加入
--hot
選項:webpack-dev-server --hot複製程式碼
需要在入口處加上如下程式碼
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都可以使用。