Bun 到底是什么?一个比 Node.js "更快更香"的 JS 运行时

🔥 Bun 到底是什么?一个比 Node.js "更快更香"的 JS 运行时

从安装到实战,带你玩转这个被 Anthropic 收购的"新玩意儿"


📋 目录

  1. [Bun 是什么?](#Bun 是什么? "#bun-%E6%98%AF%E4%BB%80%E4%B9%88")
  2. [为什么要有 TypeScript?](#为什么要有 TypeScript? "#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E6%9C%89-typescript")
  3. [JS 的坑------弱类型](#JS 的坑——弱类型 "#js-%E7%9A%84%E5%9D%91%E5%BC%B1%E7%B1%BB%E5%9E%8B")
  4. [实战:用 Bun + axios 调 LLM 接口](#实战:用 Bun + axios 调 LLM 接口 "#%E5%AE%9E%E6%88%98%E7%94%A8-bun--axios-%E8%B0%83-llm-%E6%8E%A5%E5%8F%A3")
  5. 总结

🤔 Bun 是什么?

先看我的学习笔记:

Bun 是比 Node 更快、开箱即用 0 配置的 JS/TS 运行时 + 包管理器 Node.js 的优化升级版,性能更佳 被 Anthropic 收购了,用于 Claude Code 底层

一句话理解

Bun = 一个比 Node.js 更快、更省事的 JavaScript 运行环境

对比 Node.js Bun
启动速度 相对慢 快 3-4 倍
包管理器 npm 内置(兼容 npm 包)
TypeScript 需要额外配置 tsc 开箱即用,0 配置
.env 支持 需要 dotenv 包 内置支持
收购 --- 被 Anthropic(Claude 的公司)收购

Bun 的 slogan 就是:

"一切都在 Bun 中,开箱即用,无需配置"


🎯 为什么要有 TypeScript?

typescript 复制代码
// js 弱类型
// ts 是 js 的超集,添加了类型约束

const nickname: string = '1';
const age: number = 10;  // 检测类型错误
console.log(`我是${nickname},我今年${age}岁`)

TypeScript 解决什么问题?

JS 的问题是"太随意了":

javascript 复制代码
let a = "1";
let b = 2;
console.log(a + b);  // "12" (字符串拼接,不是加法!)
// 而且不报错!错误就这样藏起来了...

TS 加了"规矩":

typescript 复制代码
let a: string = "1";
let b: number = 2;
// a + b 会报错,不能把字符串和数字相加
// 在写代码的时候就把问题揪出来

TypeScript 已成 AI Agent 标配

ts 非常强大,已经是 AI Agent 标配

现在 Claude、GPT 生成的前端代码,绝大部分都是 TypeScript。所以学 Bun 顺便也学了 TypeScript,一举两得!


⚠️ JS 的坑------弱类型

a.html 中的代码:

html 复制代码
<input type="text" id="ipt">
<script>
  const ipt = document.getElementById("ipt");
  ipt.addEventListener("change", function(event) {
    console.log(event.target.value);
    console.log(typeof event.target.value);  // 永远是 "string"!
  })
</script>

典型的 JS 坑

javascript 复制代码
function add(a, b) {
    return a + b;
}

// 用户输入了 "3"(字符串)
add(1, "3");  // "13" (字符串拼接!)
// 你以为在算加法,其实在拼接字符串
// 而且不报错!!!

"+" 的双重身份

场景 行为 例子
数字 + 数字 加法 1 + 23
数字 + 字符串 字符串拼接 1 + "2""12"
字符串 + 字符串 字符串拼接 "1" + "2""12"

解决方案:类型转换

typescript 复制代码
function add(a: number, b: number): number {
    return a + b;
}

let a = 1;
let b = '3';

// 三种转换方式
add(a, +b);               // + 运算符:隐式类型转换(最简洁)
add(a, Number(b));        // Number():强制类型转换(最安全)
add(a, parseInt(b));      // parseInt():API(从字符串中提取数字)

🚀 实战:用 Bun + axios 调 LLM 接口

这是 axios-demo/index.ts 的完整实战:

第一步:初始化项目

bash 复制代码
bun init
# Bun 自动生成 package.json、tsconfig.json
# 无需额外配置!

第二步:安装依赖

bash 复制代码
bun add axios dotenv
# Bun 的包管理器比 npm 快 10-20 倍

第三步:写代码

typescript 复制代码
// http 请求 llm 接口
// bun 代替 npm 做包管理器,内置支持 .env
import axios from "axios";

async function chat() {
  try {
    const res = await axios.post(
      `${process.env.DEEPSEEK_BASE_URL}/chat/completions`,
      {
        model: "deepseek-v4-flash",
        messages: [
          {
            role: "user",
            content: "你好,介绍一下 bun",
          },
        ],
      },
      {
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${process.env.DEEPSEEK_API_KEY}`,
        },
      },
    );
    console.log(res.data.choices[0].message.content);
  } catch (err: any) {
    console.log(err.message);
  }
}

// 记得调用!
chat();

第四步:配置 .env 文件

ini 复制代码
DEEPSEEK_API_KEY=你的_API_密钥
DEEPSEEK_BASE_URL=https://api.deepseek.com

Bun 内置支持 .env! 不需要 dotenv.config(),直接用 process.env 就行!

第五步:运行

bash 复制代码
bun run index.ts

看到没?Bun 直接运行 .ts 文件,不需要编译! Node.js 可做不到这一点。


💤 顺便学一个:Promise 和 sleep 函数

3.js 里还封装了一个 sleep 函数:

javascript 复制代码
function sleep(t) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve();
    }, t);
  });
}

async function main() {
  console.log("--start--");
  await sleep(2000);  // 等 2 秒
  console.log("--end--");
}

main();

await 的作用:让异步代码看起来像同步的一样,一行一行执行。


✨ 总结

Bun 的核心优势

优势 说明
启动速度比 Node.js 快 3-4 倍
开箱即用 支持 TypeScript、.env、JSX,无需配置
全栈 运行时 + 包管理器 + 打包器,一体解决
兼容 npm 已有的 npm 包都能用
AI 友好 被 Anthropic 收购,用于 Claude Code

Bun 和 Node.js 怎么选?

场景 推荐
新项目 ✅ Bun(更快、配置更少)
已有 Node 项目 不着急迁移,Bun 兼容性还在完善
AI 开发 ✅ Bun(Claude Code 的底层)
简单脚本 ✅ Bun(一行命令搞定)

安装 Bun

bash 复制代码
# Windows
powershell -c "irm bun.sh/install.ps1 | iex"

# Mac / Linux
curl -fsSL https://bun.sh/install | bash

# 验证
bun --version
相关推荐
riuphan1 小时前
JavaScript 事件循环:单线程异步编程的核心机制
前端·javascript
小小龙学IT1 小时前
Midscene.js:AI驱动的跨平台UI自动化革命
javascript·人工智能·ui
拾年2751 小时前
Bun:重新定义 JavaScript 运行时 - 为什么它可能是 Node.js 的终结者?
javascript·typescript·bun
数据知道1 小时前
网站到底是如何通过JS读取你的浏览器指纹的?
开发语言·javascript·ecmascript·指纹浏览器
用户938515635071 小时前
从JS的“坑”到TS的“墙”,再到Bun与AI:打造健壮的全栈应用
前端·javascript
橘子星2 小时前
浅谈 TypeScript 与 Bun:现代 JavaScript 开发的利器
前端·javascript
铁皮饭盒2 小时前
Bun 的三种并发"暗器":reusePort、Worker、spawn,能硬刚 Java 吗?
前端·javascript·后端
CodeSheep2 小时前
宇树科技,即将上市!
前端·后端·程序员
ldmd2842 小时前
Typescript 入门篇-3
javascript·typescript·notepad++