Bun 是什么?
Bun 是用于 JavaScript 和 TypeScript 应用程序的多合一工具包。它作为一个名为 bun 的可执行文件提供。
其核心是 Bun 运行时,这是一个快速的 JavaScript 运行时,旨在替代 Node.js。它是用 Zig 编写的,并由 JavaScriptCore 提供支持,大大减少了启动时间和内存使用量。
Bun 的优点
速度
目前,Bun 流程的启动速度比 Node.js 快 4.5 倍;比 Deno 快 2 倍。

TypeScript 和 JSX support 支持
可以直接执行 .jsx、.ts、和 .tsx 文件。
Bun 的转译器在执行之前将这些转换为普通的 JavaScript。
兼容 ESM 和 CommonJS
世界正在向 ES 模块(ESM)迈进,但 npm 上的数百万个包仍然需要 CommonJS。
Bun 推荐 ES 模块,仍然支持 CommonJS。
ESM 的目标是成为浏览器最好的模块化规范。
CMJ 的目标是成为服务器最好的模块化规范。
Web 标准的 API
Bun 实现了标准的 Web API,如:fetch、WebSocket 和 ReadableStream。
Bun 由 JavaScriptCore 引擎提供支持,该引擎由 Apple 为 Safari 开发,因此一些 API,如:Headers 和 URL 直接使用 Safari 的实现。
兼容 Node.js
除了支持 Node 式模块解析外,Bun 还旨在与内置的 Node.js 全局变量(process,Buffer)和模块(path,fs,http,etc.)完全兼容。
当前还未做到完全兼容,详细看官网。
安装 Bun
# 通过 npm 安装
npm i bun -g# 查看版本
bun --version# 升级版本
bun upgrade# 通过 npm 卸载
npm uninstall bun -g
Bun 的命令
bun 命令行工具还实现了测试运行程序、脚本运行程序和 Node.js 兼容的包管理器,所有这些都比现有工具快得多,并且可以在现有的 Node.js 项目中使用,几乎不需要更改。
bun的命令几乎和npm无异,极大程度的减少了学习成本。
| 命令 | 说明 | 
|---|---|
| bun init | 初始化 | 
| bun <file> | 运行文件 | 
| bun run <script> | 运行脚本 | 
| bun build <file> | 打包文件 | 
| bun test <file> | 测试文件 | 
| bun link | 将当前包注册为一个“可链接”包 | 
| bun install | 安装所有包 | 
| bun add <pkg> | 安装包 | 
| bun remove <pkg> | 卸载包 | 
| bun update <pkg> | 更新包 | 
Bun 还提供了
bunx,功能类似npx。
TypeScript 支持
# 安装 @types/bun 包
bun add -d @types/bun
配置 tsconfig.json 文件
{"compilerOptions": {// Enable latest features"lib": ["ESNext"],"target": "ESNext","module": "ESNext","moduleDetection": "force","jsx": "react-jsx","allowJs": true,// Bundler mode"moduleResolution": "bundler","allowImportingTsExtensions": true,"verbatimModuleSyntax": true,"noEmit": true,// Best practices"strict": true,"skipLibCheck": true,"noFallthroughCasesInSwitch": true,// Some stricter flags"noUnusedLocals": true,"noUnusedParameters": true,"noPropertyAccessFromIndexSignature": true}
}
用 Bun 写一个服务器脚本
// server.jsconst server = Bun.serve({port: 3000,fetch(req) {return new Response("Bun!");},
});console.log(`服务器启动在了 http://localhost:${server.port}`);