运行时包管理器打包器测试运行器代码检查格式化指南参考博客反馈

快速开始

使用 Bun 构建您的第一个应用

概览

使用 Bun.serve 构建一个简约的 HTTP 服务器,在本地运行它,然后通过安装一个包来扩展它。


  1. 步骤 1

    使用 bun init 初始化一个新项目。

    terminal
    bun init my-app
    

    bun init 会提示您选择一个模板:Blank、React 或 Library。对于本指南,请选择 Blank。

    terminal
    bun init my-app
    
    Text
    ✓ 选择一个项目模板: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. 步骤 2

    使用 bun run 运行 index.ts。

    terminal
    cd my-app
    bun run index.ts
    
    Text
    Hello via Bun!
    
  3. 步骤 3

    将 index.ts 的内容替换为以下代码:

    index.ts
    const server = Bun.serve({
      port: 3000,
      routes: {
        "/": () => new Response('Bun!'),
      }
    });
    
    console.log(`Listening on ${server.url}`);
    

    再次运行 index.ts。

    terminal
    bun run index.ts
    
    Text
    Listening on http://localhost:3000/
    

    访问 http://localhost:3000 测试服务器。您应该看到一个显示 "Bun!" 的页面。

    在 Bun 中看到 TypeScript 错误?

    bun init 会安装 Bun 的 TypeScript 声明并配置您的 tsconfig.json。如果您正在现有项目中尝试使用 Bun,可能会在 Bun 全局变量上看到类型错误。

    要解决此问题,首先安装 @types/bun 作为开发依赖。

    terminal
    bun 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. 步骤 4

    安装 figlet 包及其类型声明。Figlet 是一个将字符串转换为 ASCII 艺术的工具。

    terminal
    bun 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。

    terminal
    bun run index.ts
    
    Text
    Listening on http://localhost:3000/
    

    访问 http://localhost:3000/figlet 测试服务器。您应该看到以 ASCII 艺术形式显示的 "Bun!"。

    Text
    ____              _
    | __ ) _   _ _ __ | |
    |  _ \| | | | '_ \| |
    | |_) | |_| | | | |_|
    |____/ \__,_|_| |_(_)
    
  5. 步骤 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。

    terminal
    bun run index.ts
    
    Text
    Listening on http://localhost:3000/
    

    访问 http://localhost:3000 测试服务器。您应该看到该静态 HTML 页面。

您已经使用 Bun 构建了一个 HTTP 服务器并安装了一个包。


运行脚本

Bun 也可以执行 package.json 中的 "scripts"。添加以下脚本:

package.json
{
  "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 运行它。

terminal
bun run start
Text
Listening on http://localhost:3000/