bun对ts程序打包

Bun 本身内置了强大的打包/编译能力,能直接将 ElysiaJS 项目打包成无需依赖 Bun 运行时的单个可执行文件,下面我会一步步教你完整实现流程。

一、前置条件

确保你的开发环境满足:

  1. 已安装 Bun(推荐最新稳定版,执行 bun upgrade 可更新)
  2. 已有 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/arm64bun-linux-x64/arm64bun-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)

三、发布流程(简化版)

  1. 将打包后的可执行文件(如 elysia-app-linuxelysia-app-windows.exe)上传到服务器/分发渠道;
  2. 给 Linux/macOS 文件添加执行权限:chmod +x elysia-app-linux
  3. 直接运行即可启动 Elysia 服务,无需安装 Bun、Node.js 等运行时。

总结

  1. 核心命令:bun build --compile --outfile [输出文件名] [入口文件] 是将 ElysiaJS 打包为单个可执行文件的关键;
  2. 跨平台打包需添加 --target 参数,适配不同操作系统(macOS/Linux/Windows);
  3. 打包后的文件无需依赖任何运行时,直接运行即可启动服务,适合快速发布部署。
posted @ 2026-02-10 11:16  卓能文  阅读(211)  评论(0)    收藏  举报