学习笔记——主攻 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 分钟前
嵌入式系统设计师软考个人笔记<1>
笔记
Freshman小白17 分钟前
《智能制造系统》网课答案
学习·答案·网课答案
副露のmagic40 分钟前
更弱智的算法学习 day34
python·学习
写点什么呢1 小时前
AD21安装激活
学习
wdfk_prog2 小时前
[Linux]学习笔记系列 -- bits
linux·笔记·学习
求梦8202 小时前
JVM学习
jvm·学习
九成宫2 小时前
计算机网络期末复习——第4章:网络层 Part One
网络·笔记·计算机网络·软件工程
星火开发设计2 小时前
C++ multiset 全面解析与实战指南
开发语言·数据结构·c++·学习·set·知识
shuangrenlong2 小时前
音乐app笔记
笔记
am心2 小时前
学习笔记-菜品接口-菜品分页查询
笔记·学习