3edfe7030f2e2412bc8e5e4b37120ff105136e74
Web2App
将已构建好的静态网页(zip,入口 index.html)转换为 Windows 桌面应用 与 Android APK。本仓库包含:
web/:上传与构建状态页面server/:Express API,负责 zip 校验、GitHub 上传与 workflow 触发template/:最小 Tauri 2 壳,CI 中注入用户静态资源后打包.github/workflows/build-app.yml:并行构建 Windows / Android 并发布 Release
架构
- 用户在本地网站上传 zip
- 后端校验 zip 后,通过 GitHub Contents API 上传到
builds/{jobId}/site.zip - 后端触发
build-app.ymlworkflow - GitHub Actions 解压 zip 到
template/dist/,构建 Windows 与 Android finalizejob 创建 Release:build-{jobId},并返回下载链接
前置条件
- Node.js 20+
- 一个 GitHub 仓库(建议名称
Web2App) - Personal Access Token,权限至少包含:
repoworkflow
快速开始
1. 初始化 GitHub 仓库
git init
git add .
git commit -m "init web2app platform"
git branch -M main
git remote add origin https://github.com/<owner>/Web2App.git
git push -u origin main
2. 配置环境变量
cp .env.example .env
编辑 .env:
GITHUB_TOKEN=ghp_xxx
GITHUB_OWNER=your-github-username
GITHUB_REPO=Web2App
DEFAULT_BRANCH=main
PORT=3001
MAX_UPLOAD_MB=50
3. 安装依赖并启动
npm install
npm run dev
4. 上传测试
准备一个 zip,根目录包含 index.html,也可使用 examples/sample-site/ 打包:
cd examples/sample-site
powershell Compress-Archive -Path * -DestinationPath ../sample-site.zip -Force
在网页中填写应用名称并上传 zip。
API
| 方法 | 路径 | 说明 |
|---|---|---|
POST |
/api/builds |
multipart/form-data: file, appName, 可选 identifier |
GET |
/api/builds/:id |
查询构建状态与下载链接 |
GET |
/api/builds |
最近 20 条构建记录 |
GitHub Actions 说明
build-app.yml 通过 workflow_dispatch 触发,输入:
job_idapp_nameapp_identifier
构建产物发布到 Release tag:build-{job_id}。
Android 说明
- CI 中使用 debug/默认签名,适合 sideload 测试
- 首次 Android 构建会在 CI 中执行
tauri android init - Android 构建依赖 NDK / SDK,workflow 已预装常见组件
手动验证 workflow
在 GitHub 仓库 Actions 页选择 Build App,手动填写:
job_id: 任意已上传目录名(需先存在builds/{job_id}/site.zip)app_name: Demo Appapp_identifier: com.web2app.demo
本地数据
- SQLite:
data/web2app.db - 上传临时文件:内存处理,不持久化到磁盘
Demo 限制
- 无登录鉴权,仅适合本地/内网 demo
- GitHub Actions 有排队时间与额度限制
- 大 zip 会短暂占用仓库空间(finalize 会尝试删除
site.zip) - Android APK 非 Play Store 发布级别
目录结构
Web2App/
├── web/ # Vite + React 前端
├── server/ # Express 后端
├── template/ # Tauri 2 模板
├── .github/workflows/ # CI 构建
├── examples/ # 示例静态站点
└── data/ # 本地 SQLite(运行时生成)
常见问题
workflow_dispatch 返回 404
- 确认 workflow 文件已在默认分支
- 确认
DEFAULT_BRANCH与仓库默认分支一致
Release 没有下载链接
- 等待
finalizejob 完成 - 检查 Windows / Android job 是否都成功
zip 校验失败
- 确保
index.html在 zip 根目录,或仅套一层文件夹
Languages
TypeScript
75.7%
CSS
13.9%
JavaScript
4.6%
Rust
4%
Shell
1.1%
Other
0.7%