webpack热更新案例操作
导读
模块热替换(Hot Module Replacement 或 HMR), 也叫热更新,它是 webpack 提供的最有用的功能之一。它允许在运行时更新各种模块,而无需进行浏览器刷新或者命令行重启。
注意:热更新 HMR
只能在开发环境使用,不适用于生产环境
使用webpack.config.js
启用 HMR
启用该功能实际上相当简单。而我们要做的,就是更新 webpack-dev-server
的配置,和使用 webpack
内置的 HMR
插件。我们还要删除掉 project.js
的入口起点,因为它现在正被 index.js 模块使用。
** 1. webpack.config.js **
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const {
CleanWebpackPlugin } = require('clean-webpack-plugin');
const webpack = require("webpack")
module.exports = {
entry: {
app: './src/index.js',
},
devtool: 'inline-source-map',
devServer:{
// 新增 devServer
contentBase: './dist',
hot: true
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist'),
publicPath: '/'
},
plugins:[
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
title: 'output出口管理'
}),
new webpack.NamedModulesPlugin(), // 新增引入webpack默认方法 NamedModulesPlugin()
new webpack.HotModuleReplacementPlugin(), // 新增引入webpack默认方法 HotModuleReplacementPlugin()
]
};
2. 我们使用npm run start
来执行命令webpack-dev-server --open
3. 编辑index.js
如下:
// 在最底下新增如下
if (module.hot) {
module.hot.accept('./project.js', function() {
console.log('Accepting the updated printMe module!');
printMe();
})
}
4. 修改project.js
如下:
export default function printMe() {
console.log(' 我会打印这条信息…')
}
5. 命令行打印
D:\me\npm\test\webpack-test>npm run start
> webpack@1.0.0 start D:\me\npm\test\webpack-test
> webpack-dev-server --open
i 「wds」: Project is running at http://localhost:8080/
i 「wds」: webpack output is served from /
i 「wds」: Content not from webpack is served from ./dist
i 「wdm」: Hash: d067c0aaf40790e7daa9
Version: webpack 4.34.0
Time: 4304ms
Built at: 2019-06-14 13:31:15
Asset Size Chunks Chunk Names
app.bundle.js 2.35 MiB app [emitted] app
index.html 186 bytes [emitted]
Entrypoint app = app.bundle.js
[0] multi ./node_modules/_webpack-dev-server@3.7.1@webpack-dev-server/client?http://localhost (webpack)/hot/dev-server.js ./src/index.js 52 bytes {
app} [<