Skip to content

学校晚霞黄昏晚霞层渐染,一抹灯白橘黄橙

封面是在校外吃完晚饭后散步到南大门时,只见晚霞侵染了半边天空。

胡言乱语

再修理自行车

这周自行车前胎爆了,骑了一周共享单车,趁着周末有时间赶紧换了车胎,记得买这辆车也才大三的事,但从初中以后就告别自行车了。小时候尝试着大人专属的二八大杠,每次都跨不上车座。遂胜于无聊,改装了一辆自行车,凑了凑配件,竟然真的成功了。能跑,速度不快,在公路上来回驰骋,那时候是真的快乐。十年后的今天再修理自行车,有一种熟悉又陌生的感觉。我看着车,呆呆的,心想:车轮什么时候这么小了呢?

值得分享

  • Bun

    一个现代的 JavaScript/TypeScript 运行时,旨在替代 Node.js,使用 Zig 语言编写,专注于开发效率和运行速度。

  • Deno

    一个现代的 JavaScript/TypeScript 运行时,用 Rust 语言编写,原生支持 TypeScript、ES 模块和现代 Web API。

  • pnpm

    一个高性能的Node.js 包管理器,作为 npm 和 yarn 的现代替代品,主打速度快、磁盘节省、严格依赖管理。

编程手札

Bun 简介

一个现代的 JavaScript/TypeScript 运行时

核心特性

  • 极速启动:比 Node.js 快 3~5 倍,冷启动几乎无延迟
  • 内置工具链:自带 bun install(包管理)、bun run、bun test、bun build
  • 原生支持 TS/JSX:无需额外配置,直接运行 .ts.tsx 文件
  • 内置测试运行器:类似 Jest,但更快,支持 bun test
  • 内置 Web API:支持 fetch、WebSocket、Headers 等浏览器 API
  • 内置 SQLite 支持:Bun.sqlite 可直接操作数据库
  • 兼容 npm 生态:可安装和使用大多数 npm 包

现在我们使用 Bun 创建一个简单的 HTTP 服务器,试试吧。

动手体验

  1. 创建项目:

    bash
    mkdir bun-demo
    cd bun-demo
    
    // 会提示你输入项目类型、模板等,也可以一路回车使用默认值。
    bun init

    项目结构如下:

    .
    ├── index.ts
    ├── README.md
    ├── package.json
    ├── .gitignore
    └── tsconfig.json
  2. 编写服务器代码

    创建 index.ts 文件:

    ts
    import { serve } from "bun';
    
    serve({
      port: 3000,
      fetch(req): Response {
        const url = new URL(req.url);
        if (url.pathname === '/') {
          return new Response('Hello from Bun! 🚀', {
            headers: { 'Content-Type': 'text/plain' },
          });
        }
        return new Response('Not Found', { status: 404 });
      },
    });
    console.log("Server started at http://localhost:3000")

    直接运行

    bash
    bun index.ts
    
    # 查看地址 → 显示 "Hello from Bun! 🚀"
    curl http://127.0.0.1:3000/
  3. 启用热重载(开发模式)

    Bun 本身不内置热重载,但我们可以使用 bun --watch 实现文件变化自动重启

    bash
    bun --watch index.ts

    现在我们修改 index.ts,看看响应变化

    ts
    import { serve } from "bun';
    
    serve({
      port: 3000,
      fetch(req): Response {
        const url = new URL(req.url);
        // 修改接口为 /bun
        if (url.pathname === '/') {
          return new Response('Hello from Bun! 🚀', {
            headers: { 'Content-Type': 'text/plain' },
          });
        }
        return new Response('Not Found', { status: 404 });
      },
    });
    console.log("Server started at http://localhost:3000")

    再次访问接口

    bash
    # 查看地址 → 显示 "Not Found"
    curl http://127.0.0.1:3000/
  4. 包管理

    让我们试试Bun的包管理,安装 nanoid(生成唯一 ID):

    bash
    bun add nanoid

    修改 index.ts,添加一个新路由:

    ts
    import { nanoid } from "nanoid";
    
    // 在 fetch 内添加:
    if (url.pathname === "/id") {
      return new Response(JSON.stringify({ id: nanoid() }), {
        headers: { "Content-Type": "application/json" },
      });
    }

    重启服务后访问 /id,会返回一个随机 ID。

  5. 测试功能

    创建 test.test.ts

    ts
    import { expect, test } from "bun:test";
    
    const BASE = "http://localhost:3000";
    
    test("GET / 返回 200 且正文正确", async () => {
      const res = await fetch(BASE + "/");
      expect(res.status).toBe(200);
      const text = await res.text();
      expect(text).toBe("Hello from Bun! 🚀");
    });

    运行测试:

    bash
    bun test
  6. 总结

Bun 在前端开发体验上比较完善,解决了前端诸多痛点。如果你想创建新项目不妨试试 Bun,绝对会给你不同的体验。

清闲半日

  • 电视剧:《重启人生 ブラッシュアップライフ》

    很好看,十分推荐,虽然剧情上有点小瑕疵,但是瑕不掩瑜。对于人生有很多启发。很有意义的一部剧。尤其是当女主真正的过好这辈子而不是考虑下辈子,他才真正把人生参透一撇。每一次选择都会有不同的人生,祝愿我们每次都有正确的选择。

  • 音乐:《 慢慢喜欢你》——李荣浩

    怎么说呢,有种大学时期初恋的味道,又酸又甜。虽然我没经历过😂

如有转载或 CV 请标注本站原文地址