用 Babel 编译 React 组件,使用的 preset 是@babel/preset-react。要实现 React 组件的热更新,需要用到 @pmmmwh/react-refresh-webpack-plugin、react-refresh。

    1. yarn add react react-dom @babel/preset-react @pmmmwh/react-refresh-webpack-plugin react-refresh --dev
    1. // React 组件 App.jsx
    2. import React, { Component } from "react"
    3. class App extends Component {
    4. constructor(props) {
    5. super(props)
    6. this.state = {
    7. title: "前端11",
    8. }
    9. }
    10. render() {
    11. return (
    12. <div>
    13. <h2>{this.state.title}</h2>
    14. </div>
    15. )
    16. }
    17. }
    18. export default App
    1. // 入口文件
    2. import React from 'react'
    3. import ReactDOM from 'react-dom'
    4. import App from './App.jsx'
    5. if (module.hot) {
    6. module.hot.accept([], () => {
    7. })
    8. }
    9. ReactDOM.render(<App />, document.getElementById('app'))

    js 和 jsx 的 loader 可以统一写成:

    1. {
    2. test: /\.jsx?$/,
    3. exclude: /node_modules/,
    4. use: ['babel-loader']
    5. }

    Babel配置文件:

    1. // babel.config.js
    2. module.exports = {
    3. presets: [
    4. ['@babel/preset-env'],
    5. ['@babel/preset-react'],
    6. ],
    7. plugins: [
    8. ['react-refresh/babel']
    9. ]
    10. }