快速开始
使用 Bun 构建您的第一个应用
概览
使用 Bun.serve 构建一个简约的 HTTP 服务器,在本地运行它,然后通过安装一个包来扩展它。
- 步骤 1
使用
bun init初始化一个新项目。terminalbun init my-appbun init会提示您选择一个模板:Blank、React或Library。对于本指南,请选择Blank。terminalbun init my-appText✓ 选择一个项目模板:Blank + .gitignore + CLAUDE.md + .cursor/rules/use-bun-instead-of-node-vite-npm-pnpm.mdc -> CLAUDE.md + index.ts + tsconfig.json (for editor autocomplete) + README.md新的
my-app目录包含一个基本的 Bun 应用。 - 步骤 2
使用
bun run运行index.ts。terminalcd my-app bun run index.tsTextHello via Bun! - 步骤 3
将
index.ts的内容替换为以下代码:index.ts
const server = Bun.serve({ port: 3000, routes: { "/": () => new Response('Bun!'), } }); console.log(`Listening on ${server.url}`);再次运行
index.ts。terminalbun run index.tsTextListening on http://localhost:3000/访问
http://localhost:3000测试服务器。您应该看到一个显示"Bun!"的页面。在 Bun 中看到 TypeScript 错误?
bun init会安装 Bun 的 TypeScript 声明并配置您的tsconfig.json。如果您正在现有项目中尝试使用 Bun,可能会在Bun全局变量上看到类型错误。要解决此问题,首先安装
@types/bun作为开发依赖。terminalbun add -d @types/bun然后在
tsconfig.json的compilerOptions中添加以下配置:tsconfig.json{ "compilerOptions": { "lib": ["ESNext"], "target": "ESNext", "module": "Preserve", "moduleDetection": "force", "moduleResolution": "bundler", "allowImportingTsExtensions": true, "verbatimModuleSyntax": true, "noEmit": true } } - 步骤 4
安装
figlet包及其类型声明。Figlet 是一个将字符串转换为 ASCII 艺术的工具。terminalbun add figlet bun add -d @types/figlet # 仅限 TypeScript 用户更新
index.ts,在routes中使用figlet。index.ts
import figlet from 'figlet'; // [!code ++] const server = Bun.serve({ port: 3000, routes: { "/": () => new Response('Bun!'), "/figlet": () => { // [!code ++] const body = figlet.textSync('Bun!'); // [!code ++] return new Response(body); // [!code ++] } // [!code ++] } }); console.log(`Listening on ${server.url}`);再次运行
index.ts。terminalbun run index.tsTextListening on http://localhost:3000/访问
http://localhost:3000/figlet测试服务器。您应该看到以 ASCII 艺术形式显示的"Bun!"。Text____ _ | __ ) _ _ _ __ | | | _ \| | | | '_ \| | | |_) | |_| | | | |_| |____/ \__,_|_| |_(_) - 步骤 5
现在添加一些 HTML。创建一个名为
index.html的新文件:index.html<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Bun</title> </head> <body> <h1>Bun!</h1> </body> </html>然后,在
index.ts中导入此文件,并从根路由/提供它。index.ts
import figlet from 'figlet'; import index from './index.html'; // [!code ++] const server = Bun.serve({ port: 3000, routes: { "/": index, // [!code ++] "/figlet": () => { const body = figlet.textSync('Bun!'); return new Response(body); } } }); console.log(`Listening on ${server.url}`);再次运行
index.ts。terminalbun run index.tsTextListening on http://localhost:3000/访问
http://localhost:3000测试服务器。您应该看到该静态 HTML 页面。
您已经使用 Bun 构建了一个 HTTP 服务器并安装了一个包。
运行脚本
Bun 也可以执行 package.json 中的 "scripts"。添加以下脚本:
{
"name": "my-app",
"module": "index.ts",
"type": "module",
"private": true,
"scripts": { // [!code ++]
"start": "bun run index.ts" // [!code ++]
}, // [!code ++]
"devDependencies": {
"@types/bun": "latest"
},
"peerDependencies": {
"typescript": "^7"
}
}
然后通过 bun run start 运行它。
bun run start
Listening on http://localhost:3000/