静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
✨步子哥 @steper · 2025-11-13 07:16

JManus是一个前后端分离的项目。说明如下:

项目架构

1. 后端:Java Spring Boot

  • 位置:项目根目录(pom.xml
  • 技术栈:Spring Boot 3.x + Java 17
  • 运行端口:18080
  • 作用:提供 RESTful API 服务

2. 前端:Vue3 + Vite

  • 位置:ui-vue3/ 目录
  • 技术栈:Vue 3 + TypeScript + Vite
  • 作用:纯前端应用,运行在浏览器中

API 目录的作用

src/api/ 目录中的代码是前端调用后端 API 的客户端封装,运行在浏览器中,不是服务器端代码。

工作原理

// cron-api-service.ts 中的代码
static async getAllCronTasks(): Promise<CronConfig[]> {
  const response = await fetch(this.BASE_URL)  // 浏览器发起 HTTP 请求
  // ...
}

这段代码:

  • 运行在浏览器中(不是 Node.js 服务器)
  • 使用浏览器的 fetch API 发起 HTTP 请求
  • 请求发送到后端 Spring Boot 服务器(http://localhost:18080

开发时的代理配置

查看 vite.config.ts

``31:43:ui-vue3/vite.config.ts server: { open: true, // Automatically open browser on startup host: true, // Allow external access proxy: { '/api': { target: 'http://localhost:18080', changeOrigin: true, }, '/admin': { target: 'http://localhost:18080', changeOrigin: true, }, }, },

开发时:
- 前端运行在 Vite 开发服务器(通常是 `http://localhost:5173`)
- 后端运行在 Spring Boot(`http://localhost:18080`)
- Vite 代理:前端请求 `/api/*` 会被代理到后端服务器

### 生产环境的部署

查看构建配置:

22:27:ui-vue3/vite.config.ts export default defineConfig({ base: '/ui', build: { outDir: './ui', sourcemap: true, // Enable source maps for production builds },
生产环境:
1. 前端构建:`pnpm build` 生成静态文件到 `ui-vue3/ui/` 目录
2. 部署到后端:构建产物会被复制到 `src/main/resources/static/ui/`
3. 统一服务:Spring Boot 同时提供:
   - API 服务:`http://localhost:18080/api/*`
   - 前端页面:`http://localhost:18080/ui/*`

## 架构图

┌─────────────────────────────────────────┐ │ 浏览器(用户访问) │ │ http://localhost:18080/ui │ └──────────────┬──────────────────────────┘ │ │ HTTP 请求 ▼ ┌─────────────────────────────────────────┐ │ Spring Boot 服务器 (端口 18080) │ │ ┌──────────────────────────────────┐ │ │ │ 静态资源服务 │ │ │ │ /ui/* → src/main/resources/ │ │ │ │ static/ui/ │ │ │ └──────────────────────────────────┘ │ │ ┌──────────────────────────────────┐ │ │ │ RESTful API │ │ │ │ /api/* → Java Controller │ │ │ └──────────────────────────────────┘ │ └─────────────────────────────────────────┘ ▲ │ │ fetch('/api/...') │ ┌──────────────┴──────────────────────────┐ │ 前端代码(运行在浏览器中) │ │ ui-vue3/src/api/*.ts │ │ 这些文件被编译打包后运行在浏览器 │ └─────────────────────────────────────────┘
`

总结

  • ui-vue3 是纯前端项目,不是 Node.js 服务器项目
  • src/api/ 目录是前端 API 客户端封装,运行在浏览器中
  • 开发时:前端(Vite)和后端(Spring Boot)分离运行,通过代理通信
  • 生产时:前端构建后由 Spring Boot 统一提供服务
这种架构的好处:
  • 前后端分离,可独立开发和部署
  • 类型安全:TypeScript 提供类型检查
  • 代码复用:API 调用逻辑集中管理
  • 统一部署:生产环境由 Spring Boot 统一服务
所以,
cron-api-service.ts` 等文件是前端代码,用于在浏览器中调用后端 API,而不是服务器端代码。

✅ 1