安装(没有涉及HMR)
在处理js代码的基础上安装如下npm 包yarn add --dev @babel/preset-react // 开发环境yarn add react react-dom // 生产环境
建 jsx 文件
import React, {useState} from 'react';
const App = () =>{
const [count,setcount] = useState(0)
return <>
<h1>{count}</h1>
<button onClick={() =>setcount(v =>v + 1)}>click +1</button>
</>
}
export default App;
导入入口文件
import './tools'
import App from './App.jsx';
import React from 'react';
import ReactDom from 'react-dom';
if(module.hot){
module.hot.accept(['./tools.js'], () =>{
console.log('is change ');
})
}
ReactDom.render(<App />, document.getElementById('root')); // 挂载root根目录
配置jsx 的 babel-loader 及 .babelrc文件
// .babelrc
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
],
["@babel/preset-react"]
]
}
// -----------------------------------------------
// webpack module loader
rules: [
{
test: /\.jsx?$/,
use: {
loader: "babel-loader",
},
},
],
安装(HMR实现react局部热更新)
重点
目前已知 target 必须配置为 web 即 target: 'web',配置为 browserslist 不可以
yarn add —dev react-refresh @pmmmwh/react-refresh-webpack-plugin
@pmmmwh/react-refresh-webpack-plugin 是 webpack配置内的 插件 作用是 : 起到 过渡和结合 的作用 react-refresh 是babel-loader 插件 HMR实现的核心 插件


{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3
}
],
["@babel/preset-react"]
],
"plugins": ["react-refresh/babel"] // 这里
}
额外
对于 普通的js 文件 不带 jsx 语法的文件 用
if(module.hot){
module.hot.accept([‘./tools.js’], () =>{
console.log(‘is change ‘);
})
}
对于 jsx 文件 用
