feat: 完成v1.3.0架构对齐与Web端根路径托管全量开发

- 重构架构:抽离AddCloudSyncServer到扩展类,补全中间层文档对齐
- 修复根路径404与鉴权跳转:新增中间件处理浏览器请求302跳转
- 实现种子数据初始化:添加默认管理员账号自动创建逻辑
- 优化前端代理与构建:新增Vite代理配置与自动构建Target
- 补全测试与文档:新增集成测试,更新开发与部署文档
This commit is contained in:
ShaoHua
2026-08-08 07:33:44 +08:00
parent 4fe0b5a963
commit 3213d4c718
32 changed files with 1937 additions and 86 deletions
+58 -8
View File
@@ -27,19 +27,60 @@ npm install
### 1.3 启动开发环境
**方式一:Windows 三件套(推荐)**
#### 方式一:模式 B「Web 端双开」(推荐,调试 Host API + 前端)
> 模式 B = Hua.Todo.Host 同时承担「动态 API + 前端静态站点 + MCP」三大职责,
> 访问 `http://localhost:5173/` 即可看到完整 Todo 前端,HTTP 同源无需再配 Vite proxy。
开发调试时分两个终端(修改前端能 HMR 热更新,不会每次都触发 npm build):
```powershell
# 终端 1:启动 Host(API 服务端)
.\start-host.ps1
# 终端 2:启动前端开发服务器
.\start-dev.ps1
# 终端 1:启动 Host(监听 :5173 HTTP + :7055 HTTPS,未登录时 HTTP 即可)
# ⚠️ 若尚未构建过前端,Host 直接启动后 GET / 返回 404。首次需要先 build 一次:
# cd src/Hua.Todo.Web && npm ci && npm run build
# 后续 build 会被 MSBuild Target 自动触发,见 1.4 节。
cd src/Hua.Todo.Host
dotnet run # 或 Visual Studio F5 调试 Hua.Todo.Host
```
**方式二:MAUI 嵌入模式**
```powershell
# 终端 2:Vite 开发服务器(:5174,负责前端 HMR;通过 .env.development 把 API 打回 :5173 Host)
cd src/Hua.Todo.Web
npm run dev
# 浏览器访问 http://localhost:5174 → 代码保存后浏览器立即刷新
```
在 Visual Studio 中直接调试运行 `Hua.Todo.Maui` 项目,MAUI 会自动启动内嵌 WebServer 并加载前端。
> 关闭 Vite 后直接访问 `http://localhost:5173/` 也能看到上次构建的前端静态页(非 HMR)。
#### 方式二:模式 A「MAUI 嵌入模式」
在 Visual Studio 中直接调试运行 `Hua.Todo.Maui` 项目,MAUI 会自动启动内嵌 WebServer(`localhost:5057`)并加载前端。
云同步链路:前端同源调用 `:5057` → CloudSyncProxy → 用户配置的 Web 端地址(默认 `http://localhost:5173`)。
#### 方式三:纯 Host 发布模式(快速验证部署产物)
```powershell
# 单次构建(前端 dist + Host 二进制 + wwwroot 复制)
dotnet build src/Hua.Todo.Host -c Release
dotnet run -c Release --project src/Hua.Todo.Host
# 浏览器访问 http://localhost:5173/ → 与部署后的体验一致
```
### 1.4 BuildHuaTodoWebWebRoot 自动构建说明
`src/Hua.Todo.Host/Hua.Todo.Host.csproj` 内置 `BuildHuaTodoWebWebRoot` MSBuild Target(触发时机:`BeforeBuild`),每次 `dotnet build/publish Hua.Todo.Host` 时执行:
| 行为 | 说明 |
|---|---|
| 增量构建 | 仅当 `src/Hua.Todo.Web/package.json` 或 `src/**/*.{ts,vue,css,html}` 变化时才 npm build,否则跳过 |
| Node 缺失保护 | 未安装 Node/npm 时仅输出 Warning,不阻塞 Host C# API 层编译(CI 可在外层单独 build 前端) |
| 跳过开关 | `dotnet build /p:SkipBuildHuaTodoWebWebRoot=true` 禁用整个 Target |
| 双份拷贝 | 产物同时写入 `src/Hua.Todo.Host/wwwroot/`(本地 `dotnet run`)和 `bin/Release/net10.0/wwwroot/`(`dotnet publish` 打包) |
常见提示排查:
- **`[BuildHuaTodoWebWebRoot] 未检测到 Node/npm`**:安装 Node.js 18+ 并重启终端;或 CI 先 `cd src/Hua.Todo.Web && npm ci && npm run build`。
- **`[BuildHuaTodoWebWebRoot] npm run build 退出码 != 0`**:去 `src/Hua.Todo.Web` 手动 `npm run build` 看 TypeScript/Vite 报错,修复后再 build Host。
## 2. 版本构建 (Release Build)
@@ -68,6 +109,15 @@ npm install
## 3. 服务端部署
### 3.0 构建流程(新增:前端 dist 自动进 wwwroot)
v1.3.0 起 `dotnet publish src/Hua.Todo.Host` 会自动执行:
1. `npm install`(仅 node_modules 不存在时)
2. `npm run build` → `src/Hua.Todo.Web/dist`
3. `dist/**/*` → `publish_output/wwwroot/`(保留目录结构)
因此部署前**不再需要**单独 build 前端,直接一条命令即可。CI 若在容器内无 Node,设置 `-p:SkipBuildHuaTodoWebWebRoot=true` 并在外层先 `npm ci && npm run build`。
### 3.1 Docker 部署(推荐)
```bash