Webpack 如何实现热更新?

作者: 果汁凉茶丶 | 来源:发表于2018-10-26 17:32 被阅读61次

模块热更新(热替换),其目的是为了加快用户的开发速度,提高编程体验。它并不适用于生产环境,这意味着它应当只在开发环境使用

  本文假设用户已经对webpack和前端工程化有一定的了解,否则建议先看看 前端工程化与「Webpack」一文或官方网站

$ 什么是模块热替换

模块热替换HMR - Hot Module Replacement)是 webpack 提供的最有用的功能之一。它允许在运行时替换,添加,删除各种模块,而无需进行完全刷新重新加载整个页面,其思路主要有以下几个方面

  • 保留在完全重新加载页面时丢失的应用程序的状态
  • 只更新改变的内容,以节省开发时间
  • 调整样式更加快速,几乎等同于就在浏览器调试器中更改样式

$ 启用HMR

  HMR的启用十分简单,这归功于webpack内置插件使用上的便利。我们要做的仅仅是更新webpack-dev-server的配置,和使用webpack内置的HMR插件

  一个带有热替换功能的webpack.config.js 文件的配置如下,做了这么几件事

  1. 引入了webpack库
  2. 使用了new webpack.HotModuleReplacementPlugin()
  3. 设置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,使得模块热替换的过程变得更容易。

$ 案例: HMR 修改样式表

  借助于 style-loader 的帮助,CSS 的模块热替换实际上是相当简单的。当更新 CSS 依赖模块时,此 loader 在后台使用 module.hot.accept 来修补(patch) <style> 标签。

  需要使用npm安装如下两个加载器

npm install --save-dev style-loader css-loader

接下来我们来更新 webpack.config.js 中module的配置,让这两个 loader 生效。

module: {
  rules: [
    {
      test: /\.css$/,
      use: ['style-loader', 'css-loader']
    }
  ]
},

至此,在修改css样式时,经过webpack编译过后的文件就已经被这两个加载器转化过了,HMR将自动更模块内容

  其他类型的模块更新办法与此类似,不赘述

相关文章

  • Webpack 如何实现热更新?

    模块热更新(热替换),其目的是为了加快用户的开发速度,提高编程体验。它并不适用于生产环境,这意味着它应当只在开发环...

  • webpack如何通过websocket实现热更新

    websocket解决了什么问题 学习:https://www.cnblogs.com/unclekeith/p/...

  • webpack4 vue项目搭建

    mini的demo 实现的功能:1、webpack-dev-server实现自动部署、热更新2、HtmlWebpa...

  • webpack和vite对比

    热更新时webpack做了什么 总的来说,webpack的热更新就是,当我们对代码做修改并保存后,webpack会...

  • webpack实现代码热更新

    前端开发日异月新,怎么可以使我们更好或者更舒服的去做开发呢?我想作为前端开发者来说,肯定都会思考这个问题。在没有接...

  • Webpack 热更新实现原理分析

    概述 在使用 Webpack 构建开发期时,Webpack 提供热更新功能为开发带来良好的体验和开发效率,那热更新...

  • webpack热更新

    我们在用webpack打包文件,如果打包出来的资源是带有哈希值,每打一次包,就会出现一个不同哈希值的文件。为了避免...

  • webpack 热更新

    热更新,是指 Hot Module Replacement,缩写为 HMR。 如果模块发生变化,即便这个模块已经在...

  • webpack热更新

    使用webpack可帮助我们的开发以及打包,在开发过程中,有时候我们只修改了部分代码并想不必刷新整个页面即可看到更...

  • webpack 热更新

    代码地址请戳这里 HMR 是什么? Hot Module Replacement 即模块热替换,是指当你的代码修改...

网友评论

    本文标题:Webpack 如何实现热更新?

    本文链接:https://www.haomeiwen.com/subject/xnkltqtx.html