网站首页 > 开源技术 正文
前言
我们要自己手动实现react,那么得搭建一个环境,有人说了,为什么我们还要搭建环境呢,就不能写在一个index.js文件,然后index.html里面引入么。答案是残酷的,是不行的。
为什么不行呢?为什么需要引入编译工具呢?
首先来说jsx语法,这个大家都应该熟悉,每个类或者函数最后都return的jsx语法,然后需要把jsx转化为React.createElement(虚拟dom)的形式
而支持转化jsx语法的目前只有@babel/preset-react,这个东西第一你可以在node环境里直接import使用,而如果是浏览器环境,那么你的通过webpack或者vite才行,这里我们使用的webpack,通过编译的方式
如果有人问我为什么使用webpack而不是vite的话,那我的回答是,我更熟悉webpack,哈哈
准备环境
1. 准备npm包
@babel/core // babel核心包
@babel/preset-react //支持jsx语法
@babel/preset-env // 支持最新的js语法
babel-loader // 把es6转化为es5
webpack // 这个大家都认识
webpack-cli // 可以在命令行运行webpack
webpack-dev-server // webpack服务器
html-webpack-plugin //生成html并自动引入打包文件的插件
clean-webpack-plugin //每次打包清除旧的dist里面的文件
这里有个疑问哈,babel-loader和@babel/preset-env等有什么关联呢?
- babel-loader其实就是允许在webpack里面使用babel去转换代码
- @babel/preset-env和@babel/preset-react其实就是都要转化哪些代码 @babel/preset-react从名字就可以看出来是转化react代码的,也就是jsx代码 @babel/preset-env其实就是转化最新的js语法的,把他们转化为目标浏览器可以识别的代码
然后开始安装
pnpm i @babel/core @babel/preset-react @babel/preset-env babel-loader webpack webpack-cli webpack-dev-server html-webpack-plugin clean-webpack-plugin
2. 创建webpack.config.js
配置webpack.config.js,这个配置工作其实不难,很多都是语义化的东西
const HtmlWebpackPlugin = require("html-webpack-plugin");
const path = require("path");
module.exports = {
mode: "development",
// 入口
entry: path.join(__dirname, "/src/index.js"),
// 出口
output: {
path: path.join(__dirname, "dist"),
filename: "bundle.[hash:8].js",
},
module: {
rules: [
{
// 对以js结尾的文件进行es6转es5
test: /\.js$/,
use: {
loader: "babel-loader",
options: {
presets:["@babel/preset-env", "@babel/preset-react"]
}
},
exclude: /node_modules/,
},
],
},
plugins: [
// html生成插件
new HtmlWebpackPlugin({
// 生成html参考的模板
template: "./src/index.html",
}),
],
// 服务器
devServer: {
static: path.join(__dirname, "/dist"),
open: true,
},
};
3.创建html模版
src/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="root"></div>
</body>
</html>
4. 设置启动命令
使用webpack-dev-server可以使我们支持热更新,还可以配置服务
"scripts": {
"start": "webpack-dev-server --config webpack.config.js"
}
5。创建index.js
src/index.js
react源码内容
总结
以上就是我们搭建react源码环境, 整体看上去没啥难度,接下来就是开始实现react源码了,这才是重头戏
文章转自:https://juejin.cn/post/7372031054818607123
猜你喜欢
- 2025-01-03 React 性能优化十大总结
- 2025-01-03 Vue和React的一些对比:哪个更适合你?
- 2025-01-03 React 的一些最佳安全实践
- 2025-01-03 搭建一个无需构建工具的 React 页面
- 2025-01-03 支持Vue、React混用的veaury库大火?前端摆脱二选一?
- 2025-01-03 前端开发react框架 - 组件
- 2025-01-03 从0到1无比流畅的React入门教程
- 2025-01-03 如何设计更优雅的 React 组件?
- 2025-01-03 React中使用Ant Table组件
- 2025-01-03 React支持了ES6 Classes,听听他们怎么说
你 发表评论:
欢迎- 最近发表
-
- 6月游戏推荐(二)(6月份新出的游戏)
- 37【源码】数据可视化:基于 Echarts + Python 动态实时大屏
- Kubernetes Kube-Proxy 组件 IPVS 模式工作原理及常用故障排查
- 《茶余饭后顶级英文歌曲精选》(茶余饭后的经典句子)
- rainx和MediaTek携手推出101产品生态,为5G FWA提供创新
- KAPITAL 推出蓝染风格 Aloha Shirt 系列
- 欧美经典怀旧歌曲Free loop-管不住的音符
- Mac 下php5.3-7.0的二进制包 ── PHP-OS
- 如何把一个Python应用程序装进Docker
- 为何推荐 JsonTree.js 做 JSON 可视化?
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)