使用 Bun 快速搭建一个 http 服务

前端运行时 Bun 1.0 正式发布,如今,Bun 已经稳定并且适用于生产环境。Bun 不仅是一个专注性能与开发者体验的全新 JavaScript 运行时,还是一个快速的、全能的工具包,可用于运行、构建、测试和调试 JavaScript 和 TypeScript 代码,无论是单个文件还是完整的全栈应用。

一、安装 Bun

bash 复制代码
# npm
npm install -g bun

# brew
brew tap oven-sh/bun
brew install bun

# curl
curl -fsSL https://bun.sh/install | bash

# docker
docker pull oven/bun
docker run --rm --init --ulimit memlock=-1:-1 oven/bun

二、Bun 优势

  • 相比 Node.js ,Bun 可以直接运行 .js、.ts、.cjs、.mjs、.jsx、.tsx 文件。
  • Bun 的速度非常快,启动速度比 Node.js 快 4 倍。当运行 TypeScript 文件时,这种差异会更加明显,因为在Node.js中运行TypeScript文件需要先进行转译才能运行。

三、使用 Bun 构建 http 服务

  1. 初始化项目
shell 复制代码
mkdir bun

cd bun 

npm init -y 
  1. 安装依赖
bash 复制代码
bun add figlet

bun add -d @types/figlet bun-types
  1. 配置 tsconfig.json
json 复制代码
{
  "compilerOptions": {
    // add Bun type definitions
    "types": ["bun-types"],

    // enable latest features
    "lib": ["esnext"],
    "module": "esnext",
    "target": "esnext",

    // if TS 5.x+
//    "moduleResolution": "bundler",
    "noEmit": true,
    "allowImportingTsExtensions": true,
    "moduleDetection": "force",
    // if TS 4.x or earlier
    "moduleResolution": "nodenext",

    "jsx": "react-jsx", // support JSX
    "allowJs": true, // allow importing `.js` from `.ts`
    "esModuleInterop": true, // allow default imports for CommonJS modules

    // best practices
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "skipLibCheck": true
  }
}
  1. 创建 index.ts 文件
typescript 复制代码
import { serve, file } from "bun";
import figlet from "figlet";

const server = serve({
  port: 3000,
  fetch: async (request) =>{
    // console.log(request.url)
    let files = file('./package.json')
    let json = await files.text()
    const body = figlet.textSync("Hello , Bun !");
    return new Response(`${body} \n\n ${json}`);
    // console.log(json)
  },
});

console.log(`Listening on http://localhost:${server.port} ...`);
  1. 在 package.json 中添加 start 启动命令,配置热更新,监听文件变化
json 复制代码
{
  "scripts": {
    "start": "bun --hot index.ts"
  }
}
  1. bun start 启动服务,效果如下:

欢迎访问:天问博客

相关推荐
卷心菜不卷Iris9 小时前
第1章大型互联网公司的基础架构——1.3 HTTP-DNS
网络·网络协议·http·dns·互联网大厂·http-dns·基础架构
用一个不重复的昵称9 小时前
python 并行请求多个 HTTP 接口
开发语言·python·http
浩浩测试一下13 小时前
TCP/UDP协议与OSI七层模型的关系解析| HTTPS与HTTP安全性深度思考》
网络协议·web安全·http·网络安全·https·可信计算技术·安全架构
什么蜜桃绵绵冰15 小时前
HTTP的状态码
网络·网络协议·http
_阿疯_15 小时前
嵌入式 lwip http server makefsdata
网络协议·http·嵌入式·lwip·makefsdata
程序员老王wd18 小时前
node - gyp` 版本过低可能会和当前的 Node.js 版本不兼容
node.js
m0_7482556518 小时前
从零开始在Windows系统上搭建一个node.js后端服务项目
windows·node.js
田猿笔记18 小时前
Node.js 异步并发控制:`p-map` 和 `p-limit` 的使用与对比
开发语言·javascript·node.js
真的很上进19 小时前
【1.8w字深入解析】从依赖地狱到依赖天堂:pnpm 如何革新前端包管理?
java·前端·vue.js·python·webpack·node.js·reactjs
念九_ysl19 小时前
Node.js 版本与 npm 的关系及版本特性解析:从开源项目看演进
npm·开源·node.js