React Ts项目 react-hot-loader 热更新,类型“NodeModule”上不存在属性“hot”

配置热更新会报:类型“NodeModule”上不存在属性“hot”。
由于使用了ts,在类型检查过程中对于不存在的属性就会抛此种格式的提示,解决方法也很简单,使用as关键字将 module 断言成 any 类型:

if ((module as any).hot) {
  (module as any).hot.accept('./App', () => {
    const NextApp = require('./App').default;
    render(NextApp);
  })
}

react-hot-loader 实现热更新

1、安装两个插件:

yarn add react-hot-loader -D
yarn add @hot-loader/react-dom -D

@hot-loader/react-dom插件要对应react版本
2、.babelrc 文件修改babel配置:

"plugins": [
    ["react-hot-loader/babel"]

3、修改webpack(这里使用的是版本5)
(1)webpack.target 属性设置为“web”,此属性是指定开发环境,不设置此属性的话热更新无效
(2)webpack.devServer.hot设置为“true”,开启热更新(很奇怪的是不设置此属性,使用react-hot-loader也不影响热更新)
(3)webpack.resolve.alias添加配置

alias: {
  'react-dom': '@hot-loader/react-dom'
}

4、项目入口文件的热更新配置

import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { ConfigProvider } from 'antd';
import zhCN from 'antd/lib/locale/zh_CN';
import store from './store';
import App from './App';
import { AppContainer } from 'react-hot-loader'

const render = (Component: any) => {
  ReactDOM.render(
    <Provider store={store}>
      <ConfigProvider locale={zhCN}>
        <AppContainer>
          <Component />
        </AppContainer>
      </ConfigProvider>
    </Provider>,
    document.getElementById('root')
  );
}

render(App);

if ((module as any).hot) {
  (module as any).hot.accept('./App', () => { 
    const NextApp = require('./App').default; 
    render(NextApp);
  })
}

以上就是关于热更新的配置了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值