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

相关推荐
冷雨夜中漫步5 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
盐焗西兰花6 小时前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
QiZhang | UESTC6 小时前
学习日记day76
学习
久邦科技7 小时前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
Gain_chance7 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
Gain_chance8 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习
肖永威8 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos
XH华9 小时前
备战蓝桥杯,第九章:结构体和类
学习·蓝桥杯
暗光之痕9 小时前
Unreal5研究笔记 Actor的生命周期函数
笔记·unreal engine
Gain_chance9 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习