学习笔记——主攻 vite

学习笔记------主攻 vite

  1. 从原理模拟开始,手动实现 vite 的基础加载处理逻辑,加载出我们的 jsx 语法编译出的 react 页面
  2. 开始进行构建优化,从开发环境开始,对开发环境进行构建优化,提升开发舒适度
  3. 开始进行生产打包构建优化,对生产环境进行构建优化
  4. 开始进行插件开发
  5. 回归到文档进行查漏补缺
实现一个小的 jsx 语法加载过程

先暂时使用 babel 进行 jsx 语法的处理和转化 本地实现服务器进行 请求拦截 遇到 jsx 文件 就进行代码的转化 从而将转化之后的结果 返回给浏览器,浏览器进行渲染

js 复制代码
/* 服务器拦截代码 */
const http = require("http");
const fs = require("fs");
const path = require("path");
const { transform } = require("@babel/core");

const server = http.createServer(async (req, res) => {
  const filePath = path.join(__dirname, req.url.split("?")[0]);

  try {
    if (filePath.endsWith(".jsx")) {
      const code = await fs.promises.readFile(filePath, "utf-8");

      // 使用 Babel 编译 JSX
      const result = transform(code, {
        presets: ["@babel/preset-react"],
        filename: filePath,
      });

      res.writeHead(200, { "Content-Type": "application/javascript" });
      res.end(result.code);
    } else {
      const content = await fs.promises.readFile(filePath);
      res.end(content);
    }
  } catch (err) {
    res.writeHead(404);
    res.end("Not Found");
  }
});

server.listen(5500, "127.0.0.1", () => {
  console.log("Dev server running at http://127.0.0.1:5500");
});
html 复制代码
<!-- 本地 html 代码 -->

<!DOCTYPE html>
<html>
  <head>
    <title>Mini Vite</title>
  </head>

  <body>
    <div id="root"></div>
    <!-- 加载 React 和 ReactDOM (CDN 版本) -->
    <script
      crossorigin
      src="https://unpkg.com/react@18/umd/react.development.js"
    ></script>
    <script
      crossorigin
      src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"
    ></script>
    <!-- 加载我们的 JSX 文件 -->
    <script type="module" src="./App.jsx"></script>
  </body>
</html>
js 复制代码
/* App.jsx */
import Button from "./button.jsx"; // 确保路径正确
const App = () => {
  return (
    <h1>
      <Button />
    </h1>
  );
};

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<App />);

/* button.jsx */
const Button = () => {
  return <button>Click Me</button>;
};

export default Button; // 必须单独导出

请求结果预览

让我们看看 拦截之后返回我们的 jsx 处理之后代码

App.jsx

button.jsx

相关推荐
渡我白衣2 分钟前
运筹帷幄——在线学习与实时预测系统
人工智能·深度学习·神经网络·学习·算法·机器学习·caffe
ZhiqianXia2 分钟前
PyTorch学习笔记(16):scheduler.py
pytorch·笔记·学习
半壶清水6 分钟前
[软考网规考点笔记]-局域网之高速以太网
网络·笔记·网络协议·考试
一定要AK8 小时前
Spring 入门核心笔记
java·笔记·spring
AI成长日志8 小时前
【Agentic RL】1.1 什么是Agentic RL:从传统RL到智能体学习
人工智能·学习·算法
_李小白9 小时前
【OSG学习笔记】Day 38: TextureVisitor(纹理访问器)
android·笔记·学习
杨云龙UP10 小时前
从0到1快速学会Linux操作系统(基础),这一篇就够了!
linux·运维·服务器·学习·ubuntu·centos·ssh
头疼的程序员10 小时前
计算机网络:自顶向下方法(第七版)第八章 学习分享(三)
网络·学习·计算机网络
_李小白11 小时前
【OSG学习笔记】Day 37: NodeVisitor(顶点访问器)
笔记·学习
程序员雷欧11 小时前
大模型应用开发学习第八天
大数据·人工智能·学习