学习笔记——主攻 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

相关推荐
世人万千丶13 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
遇乐的果园16 小时前
前端学习笔记-vue加载渲染优化
前端·笔记·学习
遇乐的果园18 小时前
前端学习笔记-vue状态管理优化
前端·笔记·学习
从零开始的代码生活_18 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
可乐奶茶sky19 小时前
AI Agent 学习
人工智能·学习
摇滚侠19 小时前
Java 全栈开发实战教程 课程笔记 29-33
笔记
茯苓gao19 小时前
嵌入式开发笔记:EtherCAT协议从硬件到软件完整配置指南——从零搭建一套EtherCAT通信系统
笔记·嵌入式硬件·学习
whyTeaFo20 小时前
GAMES101: Lecture 9: Shading 3(Texture Mapping cont.) ppt笔记
笔记
RD_daoyi21 小时前
外链权重暴跌至13%,品牌提及反超传统链接——2026年不做Digital PR,你的独立站等于隐形
运维·网络·学习·机器学习·搜索引擎
chase。21 小时前
【学习笔记】PointWorld:迈向通用机器人操控的3D世界模型
笔记·学习·机器人