Skip to content
Go back

后端嵌入前端单文件部署对比

Edit

小工具、内网后台、边缘盒子常想要:一个产物、一个端口、拷上去就能跑。做法是前端 builddist/,编译期嵌进后端,由同一 HTTP 服务既提供 API 又提供静态页。本文只比这类嵌入方案,不讨论 Nginx 反代双进程、也不讨论桌面壳(Tauri / Wails)。

方案嵌入方式真·单文件体积体感热更新前端成熟度优缺点简述
Go embed//go:embed + embed.FShttp.FileServer / 框架挂载是(静态链接二进制)小~中需重编很高官方、简单、运维友好;改 UI 必重新编译发布。
Rust rust-embed / include_dir宏把目录打进二进制,Axum 等挂静态小~中需重编体积与性能好;构建链路比 Go 重一点。
.NET 单文件发布wwwroot 或 Embedded Resource + PublishSingleFile基本是(原生库可能解压旁路)需重发企业栈顺手;单文件有解压/裁剪细节要盯。
Spring Boot Fat JARresources/static(或 frontend-maven 打进 jar)是(一个 jar,非原生二进制)偏大需重打 jar很高Java 生态默认路径;要 JVM,冷启动与体积不如 Go。
Bun --compilecompile 时可带入资源 / 服务 dist是(可执行文件)需重编TS 全栈一条龙;生态与生产案例仍少于 Go。
Deno compile编译进可执行文件,静态一并带上需重编权限模型清晰;部署心智接近 Bun。
Node SEA / pkg / nexeSEA 或第三方打单文件,再读内嵌资源勉强(原生模块、路径坑多)中~大需重打中低能做但不优雅;长期更看好 Bun/Deno 或干脆 Go。
Zig @embedFile编译期嵌入字节,自己挂 HTTP极小需重编小众极致可控;要自己拼服务与 SPA fallback。
Python(PyInstaller 等)打包时收集 static,运行时解包或 zip 内读常是「单目录/单包」需重打能凑合;真单二进制体验明显弱于 Go/Rust。

共同约定(做之前先定)

推荐

什么时候别嵌

这时回到「API 一端口 + 静态另部署 / 反代」更合适;嵌入适合 交付边界就是一个进程 的场景。


Edit
Share this post on:

Next Post
全栈框架页面局部刷新技术对比