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

相关推荐
零匠学堂202532 分钟前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
客梦1 小时前
数据结构-栈与队列
数据结构·笔记
TL滕1 小时前
从0开始学算法——第四天(题目参考答案)
数据结构·笔记·python·学习·算法
Hoshino.411 小时前
从0开始学习Linux——第七部分:DNS(1)
linux·网络·学习
齐生12 小时前
iOS 知识点 - Category / Extension / Protocol 小合集
笔记·面试
TL滕2 小时前
从0开始学算法——第四天(练点题吧)
数据结构·笔记·学习·算法
一只特立独行的猪6112 小时前
大模型学习4
学习
QiZhang | UESTC3 小时前
学习日记day39
学习
白帽黑客-晨哥3 小时前
零基础系统学习渗透测试路线图
学习·网络安全·渗透测试·护网行动·产教融合·湖南省网安基地