We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在这之前我总是容易把热重载和模块热替换混淆成一个概念,在自己动手实现之后才发现两者还是有一些差别的。
HMR的有两种实现方式,一种是通过插件HotModuleReplacementPlugin和devserver配和实现,一种是通过在自定义开发服务下,使用插件webpack-dev-middleware和webpack-Hot-middleware配合实现HMR
1.配置 在webpack.config.js中配置devServer
devServer: { contentBase: './dist', // 起一个在dist文件夹下的服务器 open: true, // 自动打开浏览器并访问服务器地址 port: 8085, hot: true, // 开启HMR功能 hotOnly: true // 即使HMR不生效,也不自动刷新 },
pluginsp配置中使用HotModuleReplacementPlugin插件
plugins: [ ...// 其他插件 new webpack.HotModuleReplacementPlugin() ],
2.判断 然后进行手动判断进行模块热更新,如果你不想做以下判断那么可以使用module.hot.accept(),整个项目做hmr只要有代码变化就进行更新。
if(module.hot) { module.hot.accept('./number', () => { // 使用更新过的 library 模块执行某些操作... }) }
3.启动 最重要一点不要忘了修改启动命令
"start": "webpack-dev-server"
此时运行npm start,即可实现模块热更新
通过自己在本地搭建一个服务器,利用webpack-dev-middleware和webpack-Hot-middleware两个插件来配合实现HMR. 1.安装
// 安装express, webpack-dev-middleware , webpack-Hot-middleware cnpm install express webpack-dev-middleware webpack-Hot-middleware -D
2.配置dev.server.js dev.server.js
const path = require('path'); const express = require('express'); const webpack = require('webpack'); const webpackDevMiddleware = require('webpack-dev-middleware'); const webpackHotMiddleware = require("webpack-Hot-middleware") const config = require('./webpack.dev.js'); const complier = webpack(config); // 编译器,编译器执行一次就会重新打包一下代码 const app = express(); // 生成一个实例 const {devServer: {port, contentBase}} = config const DIST_DIR = path.resolve(__dirname, '../', contentBase); // 设置静态访问文件路径 // 等同于const DIST_DIR = path.resolve(__dirname, '../dist'); let devMiddleware = webpackDevMiddleware(complier, { // 使用编译器 publicPath: config.output.publicPath, quiet: true, //向控制台显示任何内容 noInfo: true }) let hotMiddleware = webpackHotMiddleware(complier,{ log: false, heartbeat: 2000 }) app.use(devMiddleware) app.use(hotMiddleware) // 设置访问静态文件的路径 app.use(express.static(DIST_DIR)) app.listen(port, () => { console.log("成功启动:localhost:"+ port) }) //监听端口
webpack.dev.js配置
module.exports = { entry: { // 入口文件配置 //实现刷新浏览器webpack-hot-middleware/client?noInfo=true&reload=true 是必填的 main: ['webpack-hot-middleware/client?noInfo=true&reload=true', './src/index.js'] }, devServer: { contentBase: 'dist', port: 8081 }, plugins: [ new webpack.NamedModulesPlugin(), //用于启动HMR时可以显示模块的相对路径 new webpack.HotModuleReplacementPlugin(), new OpenBrowserPlugin({ url: 'http://localhost:8081' }), // 自动打开浏览器 ], ...// 其他配置 }
完整实现在这里
配置项可以通过query 方式添加到webpack config中的路径来传递给客户端 配置项都有
通过传递第二个参数,可以将配置选项传递给中间件
webpackHotMiddleware(webpack,{ log: false, path: "/__what", heartbeat: 2000 })
注意:通过express启动服务器后,devServer中的配置就不起作用了。
3.启动命令
"start": "node ./build/dev-server.js",
启动命令npm start,即可实现HMR的功能
1.HMR的更新流程
2.HMR 工作流程图解 此为更加详细的流程分析: 上图是webpack 配合 webpack-dev-server 进行应用开发的模块热更新流程图。
The text was updated successfully, but these errors were encountered:
No branches or pull requests
前言
在这之前我总是容易把热重载和模块热替换混淆成一个概念,在自己动手实现之后才发现两者还是有一些差别的。
HMR相比热加载的好处:
实现HMR
HMR的有两种实现方式,一种是通过插件HotModuleReplacementPlugin和devserver配和实现,一种是通过在自定义开发服务下,使用插件webpack-dev-middleware和webpack-Hot-middleware配合实现HMR
通过插件HotModuleReplacementPlugin()
1.配置
在webpack.config.js中配置devServer
pluginsp配置中使用HotModuleReplacementPlugin插件
2.判断
然后进行手动判断进行模块热更新,如果你不想做以下判断那么可以使用module.hot.accept(),整个项目做hmr只要有代码变化就进行更新。
3.启动
最重要一点不要忘了修改启动命令
此时运行npm start,即可实现模块热更新
通过 Node.js API
通过自己在本地搭建一个服务器,利用webpack-dev-middleware和webpack-Hot-middleware两个插件来配合实现HMR.
1.安装
2.配置dev.server.js
dev.server.js
webpack.dev.js配置
完整实现在这里
webpack-hot-middleware的配置项
配置项可以通过query 方式添加到webpack config中的路径来传递给客户端
配置项都有
通过传递第二个参数,可以将配置选项传递给中间件
更多配置在这里webpack-hot-middleware
3.启动命令
启动命令npm start,即可实现HMR的功能
HMR实现原理
1.HMR的更新流程
2.HMR 工作流程图解

此为更加详细的流程分析:
上图是webpack 配合 webpack-dev-server 进行应用开发的模块热更新流程图。
步骤分析:
参考链接
The text was updated successfully, but these errors were encountered: