详解react-webpack2-热模块替换[HMR]

发布时间 - 2026-01-11 02:37:53    点击率:

本文介绍了react-webpack2-热模块替换[HMR],分享给大家,具体如下:

模块热替换功能会在应用程序运行过程中替换、添加或删除模块,而无需重新加载页面。这使得你可以在独立模块变更后,无需刷新整个页面,就可以更新这些模块,极大地加速了开发时间。

babel 配置

需要先下载 npm install --save-dev react-hot-loader@3.0.0-beta.6

然后在 .babelrc 中配置

{
 "presets": [
  ["es2015", {"modules": false}], // webpack 2 中需要这样配置禁用

  "stage-2",

  "react"
 ],
 "plugins": [
  "react-hot-loader/babel"
  // 开启 React 代码的模块热替换(HMR)
 ]
}

webpack 配置

入口插入模块热替换

  entry: {
    app: [
      'react-hot-loader/patch',
      // 开启 React 代码的模块热替换(HMR)

      'webpack-dev-server/client?http://localhost:8080',
      // 为 webpack-dev-server 的环境打包代码
      // 然后连接到指定服务器域名与端口,可以换成本机ip

      'webpack/hot/only-dev-server',
      // 为热替换(HMR)打包好代码
      // only- 意味着只有成功更新运行代码才会执行热替换(HMR)


      './index.js'
      // 我们 app 的入口文件
    ],
    vendor: ['react', 'react-router']
    // 公共文件打包
  }

出口配置 publicPath,(必须配置)

  output: {
    path: defPath.DEV_PATH,
    // 所有输出文件的目标路径

    filename: 'js/bundle.js',

    publicPath: '/',

    chunkFilename: '[name].chunk.js'
  },

plugins 添加相应插件

  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    // 开启全局的模块热替换(HMR)

    new webpack.NamedModulesPlugin()
    // 控制台输出模块命名美化
  ]

devServer 配置 HMR

  devServer: {
    // ... 其他配置

    hot: true,
    // 开启服务器的模块热替换(HMR)

    contentBase: defPath.DEV_PATH,
    // 输出文件的路径

    publicPath: '/'
    // 和 output 的 publicPath 保持一致
  }

应用代码中修改

应用代码中需要做很大的改动

拆分原入口文件

新建一个根组件,存放原入口文件中的路由配置部分

  /*
    Root, Router 配置
  */
  import React from 'react';
  import {Provider} from 'react-redux';
  import {browserHistory, Router} from 'react-router';
  import {syncHistoryWithStore} from 'react-router-redux';


  import store from '../store/index'; // 引入 配置后的 store 
  import routes from '../routes.js'; // 子级路由配置

  // 创建一个增强版的history来结合store同步导航事件
  const browhistory = syncHistoryWithStore(browserHistory, store);

  const Root = () => (
    <Provider store={store}>
     <div>
       <Router history={browhistory} routes={routes}/>
     </div>
    </Provider>
  );


  export default Root;

原入口文件改为

  /*
    app/js/index.js
    入口文件, 配置 webpack 热加载模块
  */
  import '../scss/index.scss';
  import '../scss/commoncom.scss';

  import React from 'react';
  import ReactDOM from 'react-dom';
  import {AppContainer} from 'react-hot-loader'; 
  // 引入 react-hot-loader 提供的容器
  import injectTapEventPlugin from 'react-tap-event-plugin';

  // 引入总路由的配置模块
  import Root from './containers/Root';

  // 定义要挂载的 DOM 节点
  const mountNode = document.getElementById('app');

  // react 的插件,提供onTouchTap()
  injectTapEventPlugin();

  // 封装 render 函数
  const render = (Component) => {
    ReactDOM.render((
      <AppContainer>
        <Component/>
      </AppContainer>
    ), mountNode);
  };

  // 初始化调用
  render(Root);

  // 配置需要热模块替换的条件
  if (module.hot && process.env.NODE_ENV !== 'production') {
    // 处理对特定依赖的更改
    module.hot.accept('./containers/Root', (err) => {
      if (err) {
        console.log(err);
      }
      // 从DOM 中移除已经挂载的 React 组件 然后重装
      ReactDOM.unmountComponentAtNode(mountNode);
      render(Root);
    });
  }

以上就可以使用 webpack 2 模块热替换,希望对大家的学习有所帮助,也希望大家多多支持。


# webpack2  # react热替换  # webpack  # react  # 热替换  # 浅谈Webpack多页应用HMR卡住问题  # webpack热模块替换(HMR)/热更新的方法  # 详解webpack2+node+react+babel实现热加载(hmr)  # webpack几种手动实现HMR的方式  # 就可以  # 加载  # 你可以  # 才会  # 会在  # 给大家  # 或删除  # 本机  # 重装  # 增强版  # 连接到  # 创建一个  # 大家多多  # 移除  # 过程中  # 新建一个  # 应用程序  # 极大地  # 这使得  # patch 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  javascript中的try catch异常捕获机制用法分析  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  利用JavaScript实现拖拽改变元素大小  如何快速搭建高效简练网站?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何在阿里云购买域名并搭建网站?  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何用花生壳三步快速搭建专属网站?  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  如何快速配置高效服务器建站软件?  使用C语言编写圣诞表白程序  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  如何在腾讯云服务器上快速搭建个人网站?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  如何在Windows 2008云服务器安全搭建网站?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  如何安全更换建站之星模板并保留数据?  如何在搬瓦工VPS快速搭建网站?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  Mybatis 中的insertOrUpdate操作  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  浅谈javascript alert和confirm的美化  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在IIS服务器上快速部署高效网站?  奇安信“盘古石”团队突破 iOS 26.1 提权  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  Swift开发中switch语句值绑定模式  Laravel如何使用查询构建器?(Query Builder高级用法)  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  如何用腾讯建站主机快速创建免费网站?  Laravel如何使用Vite进行前端资源打包?(配置示例)  EditPlus 正则表达式 实战(3)  ,怎么在广州志愿者网站注册?  网站制作报价单模板图片,小松挖机官方网站报价?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel怎么在Blade中安全地输出原始HTML内容  怎么用AI帮你设计一套个性化的手机App图标?  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】