React+Webpack4+Babel7+React-hot-loader自定义前端开发环境
2023-10-27
3861
安装相应的包
1 |
|
name | description |
---|---|
@babel/core | babel核心模块,包含转换代码成为AST语法树等功能 |
@babel/plugin-proposal-class-properties | 转换类属性插件(react类组件中属性方法转换) |
@babel/plugin-transform-runtime | 加上es6语法和API的polyfill 并且避免手动引入 import,做了公用方法的抽离 |
@babel/preset-env | 根据目标环境选择不支持的新特性来转译(stage-0是最全的特性转换,可以使用target指定兼容条件) |
@babel/preset-react | react相关插件预设 |
babel-loader | webpack loader |
cross-env | windows下执行命令加入环境变量 |
rimraf | windows下的rm |
webpack配置
1 |
|
webpack
在执行 babel-loader
时 会去check是否存在 .babelrc
,存在就去读取里面的配置
.babelrc
1 |
|
配置react-hot-loader
为啥需要这个库呢
按道理, webpack-dev-server
已经满足热更新了,为啥使用它?
不卖关子, webpack-dev-server
是检测到变化(socket) 去重新打包 ,这样会存在两个问题
- 当项目代码量非常大的时候,构建缓慢
- 每次重新构建 之前react里的属性数据会全部丢失
为了解决这两个问题,故使用 react-hot-loader
实现局部刷新
配置
- 启动webpack热模块替换(详情见上文webpack配置)
- 在babel中启用
react-hot-loader
插件(详情见上文babel配置) - webpack入口js中引入
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20// 引入HOC组件 给内部组件加上热更新feature
import { AppContainer } from 'react-hot-loader';
// .............
import Home from './components/Home.jsx'
const render = (App) => {
console.log('=======begin render======')
ReactDom.render(
<AppContainer>
<App />
</AppContainer>,
document.getElementById('root')
)
}
render(Home)
// 代码变更 进行局部渲染
if (module.hot) {
module.hot.accept('./components/Home.jsx', () => {
render(require('./components/Home.jsx').default)
})
}
项目地址
查看评论