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.js
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response("Bun!");
},
});
console.log(`服务器启动在了 http://localhost:${server.port}`);