使用 EXE 工具将全栈 Web 应用打包成单一可执行文件

介绍

在构建现代 Web 应用时,开发者经常需要在多种运行时、构建工具和部署平台之间切换。如果你需要保留服务器端的功能,例如 SSR、API 端点或身份验证,将整个应用打包成轻量级可执行文件可以简化分发。

EXEExecutable 的缩写,是一款免费、MIT 许可证的工具,可将任何全栈框架(SvelteKit、Nuxt、TanStack)打包成一个零运行时依赖的单一二进制文件。通过在构建阶段使用 Bun,EXE 能够保留框架原生的服务器能力,同时生成即时、跨平台的二进制文件。

为什么选择 EXE? * 简洁 – 运行时无需安装 Docker 或 Node。 * 安全 – 本地运行,保持用户数据私密。 * 可移植 – 二进制文件可在 Windows、macOS、Linux 甚至嵌入式设备上运行。 * 高速 – 一个命令即可启动应用;无须容器编排。

主要功能

功能 说明
零运行时依赖 你的应用以单个静态二进制文件发布——不依赖主机上额外文件或库。
全栈保留 保留 SSR、API 路由、服务器中间件和身份验证。
跨平台 生成 Windows、Linux、macOS 及 ARM 架构的二进制文件。
Docker 伴侣 如果你为 linux-x64 编译,EXE 会自动生成 Dockerfile,便于通过 Fly.io 或任何容器运行时快速自托管。
CLI 与适配器插件 为 SvelteKit (@jesterkit/exe-sveltekit) 提供单独适配器,并实验性支持 Nuxt/TanStack。
开源并可扩展 GitHub 托管,欢迎贡献;插件可为其他框架编写。

快速上手

下面给出 SvelteKit 的示例配置。使用 Nuxt 或 TanStack 的流程类似。

# 1️⃣ 安装适配器
npm install @jesterkit/exe-sveltekit

将其添加到 svelte.config.js

// svelte.config.js
import adapter from '@jesterkit/exe-sveltekit';

export default {
  kit: {
    adapter: adapter({
      binaryName: 'my-app',
    }),
  },
};

运行构建管线:

npm run build
# 可执行文件已生成在 ./dist/my-app
./dist/my-app

你的应用将在 http://localhost:3000 启动,与标准 SvelteKit 生产构建的行为完全一致,仅为单一二进制文件。

高级设置

选项 用法
--target linux-x64win32-x64darwin-arm64
--output 自定义编译后二进制文件的位置
--docker 即使不针对 linux-x64,也强制生成 Dockerfile

示例 – 编译 Linux 二进制并生成 Dockerfile:

npm run build -- --target=linux-x64 --docker

通过 Fly.io 部署

若目标为 linux-x64fly launch 帮手会提供即用的 Fly.io 配置。直接运行:

fly launch

Fly 负责托管、域名分配以及零停机重载。

使用场景

场景 优势
SaaS 演示商店 让客户在本地快速创建副本进行试用。
隐私至上应用 将数据保存在用户设备上,无需暴露到远程服务器。
自托管工具 分发单一二进制文件,管理员可在内部服务器上安装。
快速原型 避免 docker 构建时间,立即测试功能变更。

社区与扩展

EXE 生态正在快速成长。如果你使用的框架不在上述列表中,欢迎提 Issue 或提交适配器。核心使用 Rust 编写并利用 Bun 进行打包,具备良好伸缩性,并可加入新功能,例如:

  • 自动更新二进制文件
  • 原生插件支持
  • 平台特定打包工具(WebAssembly、ARM64 等)

贡献指南

  1. Fork 本仓库。
  2. 本地修改。
  3. 提交 PR,描述问题与解决方案。

我们欢迎小而聚焦的 PR。项目采用 MIT 许可证,你甚至可以将二进制文件用于商业软件。

许可证

EXE 采用 MIT 许可证——随意使用并将其集成至产品中。

总结

EXE 将全栈框架的丰富生态与单一二进制的简洁性桥接起来。它消除了对 Docker 容器、Node 运行时或复杂部署脚本的需求,同时保留所有服务器端功能。无论你是在构建演示、自托管 SaaS,还是隐私重视工具,EXE 都为你提供了零摩擦的方式,将 Web 应用迁移至任何平台。

祝打包愉快!

原创文章: 查看原文

分享本文