bun对ts程序打包
Bun 本身内置了强大的打包/编译能力,能直接将 ElysiaJS 项目打包成无需依赖 Bun 运行时的单个可执行文件,下面我会一步步教你完整实现流程。
一、前置条件
确保你的开发环境满足:
- 已安装 Bun(推荐最新稳定版,执行
bun upgrade可更新) - 已有 ElysiaJS 项目(无项目可按下方步骤快速初始化)
二、完整实现步骤
1. 准备 ElysiaJS 示例项目
先创建一个基础的 Elysia 项目作为演示(已有项目可跳过此步):
# 创建项目目录并初始化
mkdir elysia-bundle-demo
cd elysia-bundle-demo
bun init -y
# 安装 Elysia 依赖
bun add elysia
创建核心业务文件 src/index.ts:
import { Elysia } from "elysia";
// 初始化 Elysia 应用
const app = new Elysia()
// 基础路由
.get("/", () => "Hello Elysia! 🚀 (打包为单个文件版)")
// API 路由
.get("/api/info", () => ({
name: "Elysia Bundle Demo",
version: "1.0.0",
runtime: "Bun (Single Executable)",
}))
// 监听端口(支持环境变量动态指定)
.listen(Bun.env.PORT || 3000);
// 启动日志
console.log(
`🦊 Elysia 服务运行在: http://${app.server?.hostname}:${app.server?.port}`,
);
2. 打包为单个可执行文件
使用 Bun 内置的 bun build 命令,核心参数是 --compile(编译为可执行文件),具体命令如下:
(1)打包当前平台的可执行文件
# 基础打包命令(输出文件名为 elysia-app)
bun build --compile --outfile elysia-app src/index.ts
(2)跨平台打包(关键!适合发布到不同系统)
如果需要为其他操作系统打包(比如在 macOS 上打包 Linux/Windows 版本),添加 --target 参数:
# macOS ARM64 (M系列芯片)
bun build --compile --target bun-darwin-arm64 --outfile elysia-app-mac src/index.ts
# Linux x64
bun build --compile --target bun-linux-x64 --outfile elysia-app-linux src/index.ts
# Windows x64 (生成 .exe 文件)
bun build --compile --target bun-windows-x64 --outfile elysia-app-windows.exe src/index.ts
核心参数说明:
| 参数 | 作用 |
|---|---|
--compile |
核心参数,告知 Bun 将代码编译为独立可执行文件(而非普通 JS 文件) |
--outfile |
指定输出文件的名称(自定义,比如 elysia-app、app.exe 等) |
--target |
指定目标平台,常用值:bun-darwin-x64/arm64、bun-linux-x64/arm64、bun-windows-x64 |
3. 测试打包后的文件
打包完成后,直接运行生成的可执行文件即可(无需安装 Bun 或任何依赖):
# macOS/Linux
./elysia-app
# Windows (PowerShell/CMD)
./elysia-app-windows.exe
# 自定义端口运行(通过环境变量)
PORT=4000 ./elysia-app
运行成功后会看到日志:
🦊 Elysia 服务运行在: http://0.0.0.0:3000
访问 http://localhost:3000 即可看到返回结果,说明打包和运行都正常。
4. 进阶注意事项(避坑指南)
(1)静态文件处理
如果项目包含静态文件(如 public 目录),打包后需要保证静态文件路径正确:
- 方案1:将静态文件路径改为相对可执行文件的路径(部署时确保静态文件和可执行文件同目录)
- 方案2:将小型静态资源嵌入代码(比如转换为 Base64)
(2)环境变量
打包后的可执行文件仍支持读取环境变量,推荐通过运行时传入或 .env 文件管理(.env 文件需和可执行文件同目录)。
(3)依赖兼容性
Bun 会自动打包所有 npm 依赖(包括 Elysia),但需注意:
- 避免使用 Bun 不兼容的 Node.js 原生模块(如
node-gyp编译的二进制模块) - 若有二进制依赖,需确保目标平台支持(比如 Linux 打包时需兼容 glibc)
三、发布流程(简化版)
- 将打包后的可执行文件(如
elysia-app-linux、elysia-app-windows.exe)上传到服务器/分发渠道; - 给 Linux/macOS 文件添加执行权限:
chmod +x elysia-app-linux; - 直接运行即可启动 Elysia 服务,无需安装 Bun、Node.js 等运行时。
总结
- 核心命令:
bun build --compile --outfile [输出文件名] [入口文件]是将 ElysiaJS 打包为单个可执行文件的关键; - 跨平台打包需添加
--target参数,适配不同操作系统(macOS/Linux/Windows); - 打包后的文件无需依赖任何运行时,直接运行即可启动服务,适合快速发布部署。

浙公网安备 33010602011771号