1、什么是模块热替换
模块热替换(HMR - Hot Module Replacement)是 webpack 提供的最有用的功能之一。它允许在运行时替换,添加,删除各种模块,而无需进行完全刷新重新加载整个页面,其思路主要有以下几个方面
- 保留在完全重新加载页面时丢失的应用程序的状态
- 只更新改变的内容,以节省开发时间
- 调整样式更加快速,几乎等同于就在浏览器调试器中更改样式
2、启用HMR
HMR的启用十分简单,这归功于webpack内置插件使用上的便利。我们要做的仅仅是更新webpack-dev-server的配置,和使用webpack内置的HMR插件
一个带有热替换功能的webpack.config.js 文件的配置如下,做了这么几件事
- 引入了webpack库
- 使用了
new webpack.HotModuleReplacementPlugin()
- 设置
devServer
选项中的hot
字段为true
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: { contentBase: './dist', hot: true }, plugins: [ new CleanWebpackPlugin(['dist']), new HtmlWebpackPlugin({ title: 'Hot Module Replacement' }), new webpack.HotModuleReplacementPlugin() ], output: { filename: '[name].bundle.js', path: path.resolve(__dirname, 'dist') } };
模块的热替换相对来说比较难掌握,很容以一不小心就犯错导致失效,好在存在很多 loader,使得模块热替换的过程变得更容易。
如果想对css文件进行HMR,只把devServe中的hot设置就行了
如果想对js文件进行HMR,只把devServe中的hot设置为true是不够的,比如我想对某个文件进行HMR,还需要加这一句:
而Vue框架, 在底层完成了这个步骤,只需要把devServe中的hot设置就行了,但是原生的项目,就需要自己配置了
什么是HMR?(模块热更新 HotModuleReplacement)【Webpack】_哔哩哔哩_bilibili
如何在JS中使用HMR?(模块热更新 HotModuleReplacement)【Webpack】_哔哩哔哩_bilibili
这两个视频讲解的很好
作者:果汁凉茶丶
链接:https://www.jianshu.com/p/45c150c4aece
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。