Bun项目快速入门指南:构建你的第一个HTTP服务器
bun 极其快速的JavaScript运行时环境、打包工具、测试运行器和包管理器——集于一身。 项目地址: https://gitcode.com/gh_mirrors/bu/bun
前言
Bun是一个新兴的JavaScript运行时环境,它以其出色的性能和现代化的特性在开发者社区中迅速获得了关注。本文将带你快速上手Bun,通过构建一个简单的HTTP服务器来体验Bun的核心功能。
环境准备
首先,我们需要创建一个新的项目目录并初始化Bun项目:
mkdir bun-quickstart
cd bun-quickstart
bun init
执行bun init
命令会启动一个交互式项目初始化向导。对于本教程,你可以直接按回车键接受所有默认选项。这个命令会自动生成以下文件:
package.json
:项目配置文件index.ts
:项目入口文件(TypeScript).gitignore
:Git忽略文件配置tsconfig.json
:TypeScript配置文件README.md
:项目说明文件
创建HTTP服务器
打开生成的index.ts
文件,我们将使用Bun内置的HTTP服务器API来创建一个简单的Web服务器:
const server = Bun.serve({
port: 3000,
fetch(req) {
return new Response("Bun!");
},
});
console.log(`Listening on http://localhost:${server.port} ...`);
这段代码创建了一个监听3000端口的HTTP服务器,对所有请求都会返回"Bun!"文本响应。
解决TypeScript类型问题
如果你在现有项目中集成Bun,可能会遇到Bun
全局变量的类型错误。解决方法如下:
- 安装Bun的类型定义:
bun add -d @types/bun
- 在
tsconfig.json
中添加以下配置:
{
"compilerOptions": {
"lib": ["ESNext"],
"target": "ESNext",
"module": "Preserve",
"moduleDetection": "force",
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"verbatimModuleSyntax": true,
"noEmit": true
}
}
运行项目
执行以下命令启动服务器:
bun index.ts
访问http://localhost:3000,你应该能看到"Bun!"的文本响应。
使用package.json脚本
Bun支持通过package.json
中的脚本运行项目。添加以下配置:
{
"scripts": {
"start": "bun run index.ts"
}
}
然后通过以下命令运行:
bun run start
Bun的脚本执行速度非常快,比传统的npm快约28倍(6ms vs 170ms的启动开销)。
扩展功能:添加ASCII艺术效果
为了让我们的服务器更有趣,我们可以添加figlet
包来生成ASCII艺术字:
- 安装依赖:
bun add figlet
bun add -d @types/figlet # TypeScript用户需要
- 修改服务器代码:
import figlet from "figlet";
const server = Bun.serve({
port: 3000,
fetch(req) {
const body = figlet.textSync("Bun!");
return new Response(body);
},
});
重启服务器后刷新页面,你将看到漂亮的ASCII艺术字:
____ _
| __ ) _ _ _ __ | |
| _ \| | | | '_ \| |
| |_) | |_| | | | |_|
|____/ \__,_|_| |_(_)
总结
通过本教程,你已经学会了:
- 如何初始化一个Bun项目
- 使用Bun.serve创建HTTP服务器
- 处理TypeScript类型问题
- 通过package.json脚本运行项目
- 安装和使用第三方包
Bun以其出色的性能和简洁的API设计,为JavaScript/TypeScript开发者提供了全新的开发体验。你可以继续探索Bun的更多特性,如内置的测试框架、打包工具等,来构建更复杂的应用。
bun 极其快速的JavaScript运行时环境、打包工具、测试运行器和包管理器——集于一身。 项目地址: https://gitcode.com/gh_mirrors/bu/bun
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考