@lovrabet/rabetbase-cli 2.0.2-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +45 -0
- package/README.md +605 -0
- package/lib/ai-setup/config.js +1 -0
- package/lib/api/api-doc-ui.js +1 -0
- package/lib/api/api-doc.js +1 -0
- package/lib/api/api-pull-ui.js +1 -0
- package/lib/api/fetch-model-list.js +1 -0
- package/lib/api/generate-api-file.js +1 -0
- package/lib/api/main.js +1 -0
- package/lib/api/pull-silent.js +1 -0
- package/lib/app-menu/app-menu-sync-ui.js +1 -0
- package/lib/app-menu/create-menu.js +1 -0
- package/lib/app-menu/get-local-pages.js +1 -0
- package/lib/app-menu/get-online-menu-list.js +1 -0
- package/lib/app-menu/types.js +1 -0
- package/lib/app-menu/use-get-online-menu-list.js +1 -0
- package/lib/app-menu/utils.js +1 -0
- package/lib/app-menu/valid-url.js +1 -0
- package/lib/app-menu-update-cdn/current-content.js +1 -0
- package/lib/app-menu-update-cdn/input-cdn-asset.js +1 -0
- package/lib/app-menu-update-cdn/main.js +1 -0
- package/lib/app-menu-update-cdn/types.js +1 -0
- package/lib/app-menu-update-cdn/update-menu-cdn-url.js +1 -0
- package/lib/auth/auth-server-ui.js +1 -0
- package/lib/auth/auth-server.js +1 -0
- package/lib/auth/constant.js +1 -0
- package/lib/auth/get-cookie.js +1 -0
- package/lib/auth/is-session-valid.js +1 -0
- package/lib/auth/logout.js +1 -0
- package/lib/cli-flags.js +1 -0
- package/lib/cli.js +2 -0
- package/lib/commands/api.js +1 -0
- package/lib/commands/app.js +1 -0
- package/lib/commands/auth.js +1 -0
- package/lib/commands/bff/delete.js +1 -0
- package/lib/commands/bff/detail.js +1 -0
- package/lib/commands/bff/index.js +1 -0
- package/lib/commands/bff/list.js +1 -0
- package/lib/commands/bff/new.js +1 -0
- package/lib/commands/bff/pull.js +1 -0
- package/lib/commands/bff/push.js +1 -0
- package/lib/commands/bff/status.js +1 -0
- package/lib/commands/build.js +1 -0
- package/lib/commands/codegen/index.js +1 -0
- package/lib/commands/codegen/sdk.js +1 -0
- package/lib/commands/codegen/sql.js +1 -0
- package/lib/commands/config.js +1 -0
- package/lib/commands/create.js +1 -0
- package/lib/commands/dataset/detail.js +1 -0
- package/lib/commands/dataset/index.js +1 -0
- package/lib/commands/dataset/links.js +1 -0
- package/lib/commands/dataset/list.js +1 -0
- package/lib/commands/dataset/operations.js +1 -0
- package/lib/commands/init.js +1 -0
- package/lib/commands/logout.js +1 -0
- package/lib/commands/logs.js +1 -0
- package/lib/commands/mcp.js +1 -0
- package/lib/commands/menu.js +1 -0
- package/lib/commands/preview.js +1 -0
- package/lib/commands/registry.js +1 -0
- package/lib/commands/run.js +1 -0
- package/lib/commands/skill.js +1 -0
- package/lib/commands/sql/detail.js +1 -0
- package/lib/commands/sql/exec.js +1 -0
- package/lib/commands/sql/index.js +1 -0
- package/lib/commands/sql/list.js +1 -0
- package/lib/commands/sql/save.js +1 -0
- package/lib/commands/sql/validate.js +1 -0
- package/lib/commands/start.js +1 -0
- package/lib/config/config-help.js +1 -0
- package/lib/config/main.js +1 -0
- package/lib/constant/cli.js +1 -0
- package/lib/constant/domain.js +1 -0
- package/lib/constant/env.js +1 -0
- package/lib/context.js +1 -0
- package/lib/core/alias-resolver.js +1 -0
- package/lib/core/api-client.js +1 -0
- package/lib/core/bff/config.js +1 -0
- package/lib/core/bff/file-system.js +1 -0
- package/lib/core/bff/hash.js +1 -0
- package/lib/core/bff/lock.js +1 -0
- package/lib/core/bff/types.js +1 -0
- package/lib/core/bff/utils.js +1 -0
- package/lib/core/db-resolver.js +1 -0
- package/lib/core/sql-validator.js +1 -0
- package/lib/create-app/enhanced-guided-create.js +1 -0
- package/lib/create-app/format-elapsed.js +1 -0
- package/lib/create-app/main.js +1 -0
- package/lib/create-app/non-interactive.js +1 -0
- package/lib/create-app/task-finished.js +1 -0
- package/lib/create-app/task-loading.js +1 -0
- package/lib/create-app/task-running.js +1 -0
- package/lib/create-app/task-time.js +1 -0
- package/lib/create-app/use-copy-project-template.js +1 -0
- package/lib/create-app/use-format-code.js +1 -0
- package/lib/create-app/use-install-dependencies.js +1 -0
- package/lib/errors.js +1 -0
- package/lib/framework/flags.js +1 -0
- package/lib/framework/help.js +1 -0
- package/lib/framework/index.js +1 -0
- package/lib/framework/output.js +1 -0
- package/lib/framework/response.js +1 -0
- package/lib/framework/runner.js +1 -0
- package/lib/framework/types.js +1 -0
- package/lib/generated/build-info.js +1 -0
- package/lib/help.js +1 -0
- package/lib/init/main.js +1 -0
- package/lib/mcp/McpInstallUI.js +1 -0
- package/lib/mcp/claude.js +1 -0
- package/lib/mcp/cursor.js +1 -0
- package/lib/mcp/main.js +1 -0
- package/lib/mcp/mcp-install-non-interactive.js +1 -0
- package/lib/mcp/mcp-installer.js +1 -0
- package/lib/skills/main.js +1 -0
- package/lib/skills/npx-skills-add.js +1 -0
- package/lib/types/index.js +1 -0
- package/lib/ui/IDESelector.js +1 -0
- package/lib/ui/useIDESelection.js +1 -0
- package/lib/utils/ai_config.js +1 -0
- package/lib/utils/cdn-config.js +1 -0
- package/lib/utils/check-sdk-version.js +1 -0
- package/lib/utils/cli-version-check.js +1 -0
- package/lib/utils/config.js +1 -0
- package/lib/utils/copy-directory.js +1 -0
- package/lib/utils/file-utils.js +1 -0
- package/lib/utils/guides-cdn.js +1 -0
- package/lib/utils/http-client.js +1 -0
- package/lib/utils/logger.js +1 -0
- package/lib/utils/rules-cdn.js +1 -0
- package/lib/utils/sleep.js +1 -0
- package/lib/utils/template-replacer.js +1 -0
- package/package.json +77 -0
- package/sidecar/flags.json +10 -0
- package/templates/README.md +97 -0
- package/templates/generate-api/api.ts.tpl +47 -0
- package/templates/generate-api/client.ts.tpl +64 -0
- package/templates/projects/sub-app-react-demo/.prettierrc +1 -0
- package/templates/projects/sub-app-react-demo/CHANGELOG.md +53 -0
- package/templates/projects/sub-app-react-demo/README.md +318 -0
- package/templates/projects/sub-app-react-demo/docs/API_RULE_CHANGE.md +212 -0
- package/templates/projects/sub-app-react-demo/docs/quick-start.md +526 -0
- package/templates/projects/sub-app-react-demo/index.html +27 -0
- package/templates/projects/sub-app-react-demo/package.json +34 -0
- package/templates/projects/sub-app-react-demo/public/logo.svg +1 -0
- package/templates/projects/sub-app-react-demo/public/vite.svg +1 -0
- package/templates/projects/sub-app-react-demo/src/api/api.ts +83 -0
- package/templates/projects/sub-app-react-demo/src/api/client.ts +64 -0
- package/templates/projects/sub-app-react-demo/src/layouts/MainLayout.tsx +311 -0
- package/templates/projects/sub-app-react-demo/src/main.tsx +48 -0
- package/templates/projects/sub-app-react-demo/src/pages/dashboard/index.tsx +572 -0
- package/templates/projects/sub-app-react-demo/src/pages/data-screen/index.tsx +526 -0
- package/templates/projects/sub-app-react-demo/src/pages/index.tsx +467 -0
- package/templates/projects/sub-app-react-demo/src/pages/sdk-demo/index.tsx +453 -0
- package/templates/projects/sub-app-react-demo/src/pages/workbench/index.module.css +293 -0
- package/templates/projects/sub-app-react-demo/src/pages/workbench/index.tsx +155 -0
- package/templates/projects/sub-app-react-demo/src/router/index.tsx +30 -0
- package/templates/projects/sub-app-react-demo/src/style.css +92 -0
- package/templates/projects/sub-app-react-demo/src/utils/api.ts +12 -0
- package/templates/projects/sub-app-react-demo/src/vite-env.d.ts +2 -0
- package/templates/projects/sub-app-react-demo/tsconfig.json +26 -0
- package/templates/projects/sub-app-react-demo/vite.config.ts +111 -0
- package/templates/rules/lovrabet_rules.mdc.tpl +891 -0
- package/templates/skill/SKILL.md.tpl +120 -0
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
[📝 项目更新记录 CHANGELOG](./CHANGELOG.md)
|
|
2
|
+
|
|
3
|
+
> ⚠️ **注意**:本项目会阶段性更新,如果 `git pull` 以后无法运行,可以删除 `node_modules` 之后重新 `npm install`
|
|
4
|
+
|
|
5
|
+
# Lovrabet SDK React 演示项目
|
|
6
|
+
|
|
7
|
+
这是一个完整的 React 微前端演示项目,展示了如何在现代 React 应用中集成 Lovrabet SDK,以及如何使用 icestark 微前端方案嵌入到 Lovrabet 主应用中。
|
|
8
|
+
|
|
9
|
+
## 技术栈
|
|
10
|
+
|
|
11
|
+
- **@lovrabet/sdk** - Lovrabet 官方 SDK,支持现代化客户端实例管理
|
|
12
|
+
- **React 18** - 稳定的 React 版本,支持并发特性
|
|
13
|
+
- **TypeScript** - 类型安全的 JavaScript 超集
|
|
14
|
+
- **React Router v6** - 现代化的路由解决方案
|
|
15
|
+
- **Ant Design v5** - 企业级 UI 设计语言
|
|
16
|
+
- **Vite v7** - 下一代前端构建工具
|
|
17
|
+
- **@ice/stark-app** - 阿里飞冰微前端框架
|
|
18
|
+
- **ECharts** - 数据可视化图表库
|
|
19
|
+
- **vite-plugin-pages** - 基于文件系统的约定式路由
|
|
20
|
+
|
|
21
|
+
## 项目结构
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
├── src/
|
|
25
|
+
│ ├── api/ # SDK 配置和客户端
|
|
26
|
+
│ │ ├── api.ts # CLI 生成的 SDK 配置文件
|
|
27
|
+
│ │ └── client.ts # SDK 客户端实例
|
|
28
|
+
│ ├── layouts/ # 布局组件
|
|
29
|
+
│ │ └── MainLayout.tsx # 主布局(包含侧边栏、头部、面包屑等)
|
|
30
|
+
│ ├── pages/ # 页面组件(基于文件系统自动路由)
|
|
31
|
+
│ │ ├── index.tsx # 首页 - 项目概述和二开说明(/ 路由)
|
|
32
|
+
│ │ ├── intro/ # 介绍页面
|
|
33
|
+
│ │ │ └── index.tsx # 介绍页(/intro 路由)
|
|
34
|
+
│ │ ├── sdk-demo/ # SDK 演示页面
|
|
35
|
+
│ │ │ └── index.tsx # SDK 调用演示(/sdk-demo 路由)
|
|
36
|
+
│ │ ├── workbench/ # 工作台页面
|
|
37
|
+
│ │ │ └── index.tsx # 工作台(/workbench 路由)
|
|
38
|
+
│ │ ├── dashboard/ # 数据看板页面
|
|
39
|
+
│ │ │ └── index.tsx # 数据看板(/dashboard 路由)
|
|
40
|
+
│ │ └── data-screen/ # 数据大屏页面
|
|
41
|
+
│ │ └── index.tsx # 数据大屏(/data-screen 路由)
|
|
42
|
+
│ ├── router/ # 路由配置(自动生成)
|
|
43
|
+
│ │ └── index.tsx # 路由配置,使用 vite-plugin-pages 自动生成
|
|
44
|
+
│ ├── utils/ # 工具函数
|
|
45
|
+
│ │ └── api.ts # API 请求封装
|
|
46
|
+
│ ├── main.tsx # 微前端应用入口(导出 mount/unmount)
|
|
47
|
+
│ ├── style.css # 全局样式
|
|
48
|
+
│ └── vite-env.d.ts # Vite 类型定义
|
|
49
|
+
├── docs/ # 项目文档
|
|
50
|
+
│ ├── quick-start.md # 快速开始指南
|
|
51
|
+
│ └── API_RULE_CHANGE.md # API 变更指南
|
|
52
|
+
├── vite.config.ts # Vite 配置文件(含微前端配置)
|
|
53
|
+
├── tsconfig.json # TypeScript 配置
|
|
54
|
+
├── CHANGELOG.md # 更新记录
|
|
55
|
+
└── package.json # 项目依赖
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 功能特性
|
|
59
|
+
|
|
60
|
+
### 核心功能
|
|
61
|
+
|
|
62
|
+
- 🎯 **SDK 调用演示** - 展示 @lovrabet/sdk 的核心 CRUD 操作方法,支持动态选择数据模型
|
|
63
|
+
- 🏠 **项目概述页** - 清晰介绍项目目的、功能和技术栈,包含完整的二开说明
|
|
64
|
+
- 💼 **工作台** - 展示工作台页面示例,包含统计卡片、任务列表、进度跟踪等
|
|
65
|
+
- 📊 **数据看板** - 数据可视化看板,展示各类业务指标和图表
|
|
66
|
+
- 📈 **数据大屏** - 大屏数据展示页面,适合数据大屏场景
|
|
67
|
+
- 📖 **介绍页** - 项目介绍和说明页面
|
|
68
|
+
|
|
69
|
+
### 技术特性
|
|
70
|
+
|
|
71
|
+
- 🚀 **自动路由生成** - 基于 `vite-plugin-pages` 的文件系统约定式路由,零配置开发
|
|
72
|
+
- 🔌 **微前端支持** - 通过 `@ice/stark-app` 实现与主应用的无缝集成
|
|
73
|
+
- 📱 **响应式设计** - 支持桌面端和移动端,自适应布局
|
|
74
|
+
- 🎨 **现代化 UI** - 基于 Ant Design v5 的美观界面,包含完整的布局系统
|
|
75
|
+
- ⚡ **极速构建** - Vite v7 + ES Modules,开发体验极佳
|
|
76
|
+
- 🔒 **HTTPS 开发环境** - 开发环境自动配置 HTTPS,解决跨域问题
|
|
77
|
+
- 📦 **外部依赖优化** - React、Ant Design 等通过 CDN 加载,减小包体积
|
|
78
|
+
- 🌐 **CDN 部署支持** - 支持版本化 CDN 部署,便于多版本管理
|
|
79
|
+
|
|
80
|
+
## 快速开始
|
|
81
|
+
|
|
82
|
+
### 安装依赖
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
npm install
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 开发模式
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
lovrabet start
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
应用将在 `https://dev.lovrabet.com:5173` 启动(配置了HTTPS证书)
|
|
95
|
+
|
|
96
|
+
> 💡 **说明**:`https://dev.lovrabet.com:${port}` 中 port 不限于 5173 端口,任意端口号都支持跨域。可以通过环境变量 `PORT` 自定义端口号。
|
|
97
|
+
|
|
98
|
+
### 微前端核心配置
|
|
99
|
+
|
|
100
|
+
项目包含完整的微前端配置 (`vite.config.ts`):
|
|
101
|
+
|
|
102
|
+
- **icestark 集成**: 通过 `vite-plugin-index-html` 实现微前端打包
|
|
103
|
+
- **外部依赖**: React、ReactDOM、Ant Design、dayjs 通过 CDN 加载,减小包体积
|
|
104
|
+
- **ES Modules 输出**: 支持主应用动态加载,Tree Shaking 友好
|
|
105
|
+
- **HTTPS 支持**: 开发环境自动获取 HTTPS 证书,解决跨域问题
|
|
106
|
+
- **路径别名**: `@` 指向 `src` 目录
|
|
107
|
+
- **约定式路由**: 使用 `vite-plugin-pages` 实现基于文件系统的自动路由生成
|
|
108
|
+
- **CDN 部署**: 支持版本化 CDN 部署(通过 `CDN_DOMAIN` 环境变量配置)
|
|
109
|
+
|
|
110
|
+
### 构建生产版本
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
lovrabet build
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 预览生产版本
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npm run preview
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 开发指南
|
|
123
|
+
|
|
124
|
+
### SDK 集成使用
|
|
125
|
+
|
|
126
|
+
项目展示了如何正确集成和使用 @lovrabet/sdk:
|
|
127
|
+
|
|
128
|
+
1. **SDK 配置文件** (`src/api/api.ts`):
|
|
129
|
+
- 通过 Lovrabet CLI 自动生成
|
|
130
|
+
- 包含应用代码和模型配置
|
|
131
|
+
- 自动注册到 SDK 的配置管理器
|
|
132
|
+
|
|
133
|
+
2. **客户端实例** (`src/api/client.ts`):
|
|
134
|
+
- 导入配置文件执行注册
|
|
135
|
+
- 使用 `createClient()` 创建客户端实例
|
|
136
|
+
- 导出供整个应用使用
|
|
137
|
+
|
|
138
|
+
3. **SDK 调用示例** (`src/pages/sdk-demo/index.tsx`):
|
|
139
|
+
- 动态获取可用的数据模型列表
|
|
140
|
+
- 展示 `filter()` 查询数据(支持分页、排序、筛选)
|
|
141
|
+
- 展示 `getOne()` 获取单条记录
|
|
142
|
+
- 展示 `create()` 创建新数据
|
|
143
|
+
- 展示 `update()` 更新数据
|
|
144
|
+
- 展示 `delete()` 删除数据
|
|
145
|
+
- 包含完整的错误处理和加载状态
|
|
146
|
+
|
|
147
|
+
**典型使用模式**:
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
import { lovrabetClient } from "@/api/client";
|
|
151
|
+
|
|
152
|
+
// 获取可用的数据模型列表
|
|
153
|
+
const models = lovrabetClient.getModelList();
|
|
154
|
+
|
|
155
|
+
// 使用 filter 查询数据(推荐)
|
|
156
|
+
const data = await lovrabetClient.models.Requirements.filter({
|
|
157
|
+
currentPage: 1,
|
|
158
|
+
pageSize: 20,
|
|
159
|
+
orderBy: "createdAt",
|
|
160
|
+
orderDirection: "desc",
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// 获取单条记录
|
|
164
|
+
const item = await lovrabetClient.models.Requirements.getOne("record-id");
|
|
165
|
+
|
|
166
|
+
// 创建新数据
|
|
167
|
+
const newItem = await lovrabetClient.models.Requirements.create({
|
|
168
|
+
title: "需求标题",
|
|
169
|
+
description: "需求描述",
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// 更新数据
|
|
173
|
+
await lovrabetClient.models.Requirements.update("record-id", {
|
|
174
|
+
title: "更新后的标题",
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// 删除数据
|
|
178
|
+
await lovrabetClient.models.Requirements.delete("record-id");
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### 微前端集成要点
|
|
182
|
+
|
|
183
|
+
1. **入口文件配置** (`src/main.tsx`):
|
|
184
|
+
- 导出 `mount` 和 `unmount` 生命周期函数
|
|
185
|
+
- 使用 `isInIcestark()` 判断运行环境
|
|
186
|
+
- 支持接收主应用传递的 `customProps`
|
|
187
|
+
|
|
188
|
+
2. **自动路由配置** (`src/router/index.tsx`):
|
|
189
|
+
- 使用 `vite-plugin-pages` 实现基于文件系统的约定式路由
|
|
190
|
+
- 使用 `getBasename()` 获取动态 basename
|
|
191
|
+
- 支持微应用内部路由跳转和嵌套路由
|
|
192
|
+
|
|
193
|
+
3. **构建配置** (`vite.config.ts`):
|
|
194
|
+
- 使用 `vite-plugin-pages` 实现自动路由生成
|
|
195
|
+
- 使用 `vite-plugin-index-html` 插件支持微前端打包
|
|
196
|
+
- 配置 ES modules 输出格式,支持 Tree Shaking
|
|
197
|
+
- 外部化公共依赖减小包体积,CDN 友好
|
|
198
|
+
- HTTPS 开发环境,解决跨域问题
|
|
199
|
+
|
|
200
|
+
### 约定式路由使用指南
|
|
201
|
+
|
|
202
|
+
基于 `vite-plugin-pages` 的文件系统路由,支持以下约定:
|
|
203
|
+
|
|
204
|
+
**当前路由映射**:
|
|
205
|
+
|
|
206
|
+
- `src/pages/index.tsx` → `/` (首页 - 项目概述和二开说明)
|
|
207
|
+
- `src/pages/intro/index.tsx` → `/intro` (介绍页)
|
|
208
|
+
- `src/pages/sdk-demo/index.tsx` → `/sdk-demo` (SDK 调用演示)
|
|
209
|
+
- `src/pages/workbench/index.tsx` → `/workbench` (工作台)
|
|
210
|
+
- `src/pages/dashboard/index.tsx` → `/dashboard` (数据看板)
|
|
211
|
+
- `src/pages/data-screen/index.tsx` → `/data-screen` (数据大屏)
|
|
212
|
+
|
|
213
|
+
**路由规则**:
|
|
214
|
+
|
|
215
|
+
- 文件路由:`src/pages/about.tsx` → `/about`
|
|
216
|
+
- 目录路由:`src/pages/user/index.tsx` → `/user`
|
|
217
|
+
- 嵌套路由:`src/pages/user/profile.tsx` → `/user/profile`
|
|
218
|
+
- 动态路由:`src/pages/user/[id].tsx` → `/user/:id`
|
|
219
|
+
- 索引路由:`src/pages/index.tsx` → `/`(根路径)
|
|
220
|
+
|
|
221
|
+
**布局系统**:
|
|
222
|
+
|
|
223
|
+
- 所有页面都包裹在 `MainLayout` 中(在 `src/router/index.tsx` 中配置)
|
|
224
|
+
- 在微前端环境中,`MainLayout` 会自动隐藏,只渲染页面内容
|
|
225
|
+
- 独立运行时,显示完整的布局(侧边栏、头部、面包屑等)
|
|
226
|
+
|
|
227
|
+
**新增页面**:
|
|
228
|
+
只需在 `src/pages/` 目录下创建 `.tsx` 文件或目录,路由会自动生成,无需手动配置。
|
|
229
|
+
|
|
230
|
+
### 样式规范
|
|
231
|
+
|
|
232
|
+
- 优先使用 Ant Design 组件
|
|
233
|
+
- 自定义样式使用 CSS 或 styled-components
|
|
234
|
+
- 响应式设计支持移动端
|
|
235
|
+
|
|
236
|
+
## 部署
|
|
237
|
+
|
|
238
|
+
### 构建生产版本
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
lovrabet build
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
构建产物会输出到 `dist/` 目录(或根据 `CDN_DOMAIN` 环境变量输出到版本化目录)。
|
|
245
|
+
|
|
246
|
+
### CDN 部署
|
|
247
|
+
|
|
248
|
+
项目支持两种部署方式:
|
|
249
|
+
|
|
250
|
+
#### 方式一:标准部署
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
lovrabet build
|
|
254
|
+
# 将 dist/ 目录内容上传到您的 CDN
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
#### 方式二:版本化 CDN 部署
|
|
258
|
+
|
|
259
|
+
```bash
|
|
260
|
+
CDN_DOMAIN=https://your-cdn.com lovrabet build
|
|
261
|
+
# 构建产物会输出到 dist/sub-app-react-demo/1.0.0/
|
|
262
|
+
# 便于多版本管理和回滚
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 部署平台
|
|
266
|
+
|
|
267
|
+
项目使用 Vite 构建,可以部署到任何静态文件服务器:
|
|
268
|
+
|
|
269
|
+
- **CDN 服务**:阿里云 OSS、腾讯云 COS、AWS S3 等
|
|
270
|
+
- **静态托管**:Vercel、Netlify、GitHub Pages
|
|
271
|
+
- **自建服务器**:Nginx、Apache 等
|
|
272
|
+
|
|
273
|
+
### 主应用集成
|
|
274
|
+
|
|
275
|
+
构建完成后,需要在 Lovrabet 主应用中配置页面:
|
|
276
|
+
|
|
277
|
+
1. 访问页面配置:`https://app.lovrabet.com/app/{appCode}/pages/`
|
|
278
|
+
2. 配置路由路径(必须与代码中的路由一致)
|
|
279
|
+
3. 选择资源加载方式:`import`(Vite 项目必须选择此方式)
|
|
280
|
+
4. 配置资源加载列表:
|
|
281
|
+
- `https://your-cdn.com/path/to/assets/main.js`
|
|
282
|
+
- `https://your-cdn.com/path/to/assets/main.css`
|
|
283
|
+
|
|
284
|
+
详细步骤请参考 [快速开始指南](./docs/quick-start.md)。
|
|
285
|
+
|
|
286
|
+
## 开发注意事项
|
|
287
|
+
|
|
288
|
+
### 环境要求
|
|
289
|
+
|
|
290
|
+
- Node.js >= 16
|
|
291
|
+
- npm >= 7 或 yarn >= 1.22 或 pnpm >= 7
|
|
292
|
+
|
|
293
|
+
### 常见问题
|
|
294
|
+
|
|
295
|
+
1. **端口被占用**:修改 `.env` 文件中的 `PORT` 环境变量,或使用 `PORT=3000 npm start`
|
|
296
|
+
2. **HTTPS 证书获取失败**:检查网络连接,确保能访问 `https://g.yuntooai.com/cert/lovrabet-dev.json`
|
|
297
|
+
3. **路由不生效**:确保页面文件在 `src/pages/` 目录下,且文件扩展名为 `.tsx`
|
|
298
|
+
4. **SDK 调用失败**:检查 `src/api/api.ts` 是否正确配置,确保已通过 Lovrabet CLI 生成
|
|
299
|
+
|
|
300
|
+
### 代码规范
|
|
301
|
+
|
|
302
|
+
- 使用 TypeScript 编写代码
|
|
303
|
+
- 遵循 ESLint 和 Prettier 配置
|
|
304
|
+
- 组件使用函数式组件 + Hooks
|
|
305
|
+
- 优先使用 Ant Design 组件
|
|
306
|
+
|
|
307
|
+
## 文档链接
|
|
308
|
+
|
|
309
|
+
- [快速开始指南](./docs/quick-start.md) - 详细的接入和开发指南
|
|
310
|
+
- [API 变更指南](./docs/API_RULE_CHANGE.md) - API 地址规则变更说明
|
|
311
|
+
- [更新记录](./CHANGELOG.md) - 项目更新历史
|
|
312
|
+
|
|
313
|
+
## 相关资源
|
|
314
|
+
|
|
315
|
+
- [Lovrabet 开放平台](https://open.lovrabet.com)
|
|
316
|
+
- [CLI 前端脚手架文档](https://open.lovrabet.com/docs/lovrabet-cli/)
|
|
317
|
+
- [TypeScript SDK 文档](https://open.lovrabet.com/docs/category/lovrabet-node-sdk)
|
|
318
|
+
- [OpenAPI 文档](https://open.lovrabet.com/docs/category/openapi)
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Lovrabet API 地址规则变更通知
|
|
2
|
+
|
|
3
|
+
## 📢 重要变更通知
|
|
4
|
+
|
|
5
|
+
**生效日期**:2025-09-12
|
|
6
|
+
**影响范围**:所有调用 Lovrabet API 的合作商和开发者
|
|
7
|
+
|
|
8
|
+
**变更概要**:为了简化API架构,我们将原有的 smartapi/dbapi 双调用方式统一为单一 api 接口,同时迁移域名并简化URL路径结构。
|
|
9
|
+
|
|
10
|
+
**快速替换指南**:开发者需要将所有的
|
|
11
|
+
- `https://api.yuntooai.com/smartapi/runtime/[tenantCode]/`
|
|
12
|
+
- `https://api.yuntooai.com/dbapi/runtime/[tenantCode]/`
|
|
13
|
+
|
|
14
|
+
批量替换为 `https://runtime.lovrabet.com/api/`
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 🔄 API 地址规则变更
|
|
19
|
+
|
|
20
|
+
### 原规则(已废弃)
|
|
21
|
+
|
|
22
|
+
```diff
|
|
23
|
+
- https://api.yuntooai.com/{callMethod}/runtime/{tenant}/{appCode}/{datasetCode}/{apiName}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**参数说明**:
|
|
27
|
+
|
|
28
|
+
- <span style="color: red">~~`callMethod`: API调用类型(smartapi/dbapi)~~</span> ❌ **已删除**
|
|
29
|
+
- <span style="color: red">~~`runtime`: 固定前缀,运行时标识~~</span> ❌ **已删除**
|
|
30
|
+
- <span style="color: red">~~`tenant`: 租户名称~~</span> ❌ **已删除**
|
|
31
|
+
- `appCode`: 应用代码
|
|
32
|
+
- `datasetCode`: 数据集代码
|
|
33
|
+
- `apiName`: 接口名称
|
|
34
|
+
|
|
35
|
+
**示例**:
|
|
36
|
+
|
|
37
|
+
```diff
|
|
38
|
+
- https://api.yuntooai.com/dbapi/runtime/yuntoo/app-f4c03acb/6c6c94a6ef064fe898cfa895fe5a38f5/getList
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 新规则(当前生效)
|
|
42
|
+
|
|
43
|
+
```diff
|
|
44
|
+
+ https://runtime.lovrabet.com/api/{appCode}/{datasetCode}/{apiName}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**参数说明**:
|
|
48
|
+
|
|
49
|
+
- <span style="color: green">**`api`: 固定前缀(所有API统一使用)**</span> ✅ **新增**
|
|
50
|
+
- `appCode`: 应用代码(格式:app-{应用ID})
|
|
51
|
+
- `datasetCode`: 数据集唯一标识
|
|
52
|
+
- `apiName`: 具体的API接口名
|
|
53
|
+
|
|
54
|
+
**示例**:
|
|
55
|
+
|
|
56
|
+
```diff
|
|
57
|
+
+ https://runtime.lovrabet.com/api/app-c4055413/76a873945291498498737bc85677983d/getList
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 📋 变更对比
|
|
63
|
+
|
|
64
|
+
| 项目 | 原规则 | 新规则 | 说明 |
|
|
65
|
+
| -------------- | ------------------- | ------------------ | -------------- |
|
|
66
|
+
| **URL结构** | 6个路径段 | 4个路径段 | 简化URL结构 |
|
|
67
|
+
| **调用方式** | smartapi/dbapi 区分 | 统一使用 api | 简化调用方式 |
|
|
68
|
+
| **固定前缀** | runtime | api | 更直观的前缀 |
|
|
69
|
+
| **租户标识** | 需要租户名称 | 已包含在应用代码中 | 减少参数复杂度 |
|
|
70
|
+
| **应用代码** | app-{id} | app-{id} | 保持不变 |
|
|
71
|
+
| **数据集代码** | 保持不变 | 保持不变 | 保持不变 |
|
|
72
|
+
| **接口名称** | 保持不变 | 保持不变 | 保持不变 |
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🛠️ 需要修改的地方
|
|
77
|
+
|
|
78
|
+
### 1. API请求地址更新
|
|
79
|
+
|
|
80
|
+
**原代码**:
|
|
81
|
+
|
|
82
|
+
```diff
|
|
83
|
+
const apiUrl =
|
|
84
|
+
- "/dbapi/runtime/yuntoo/app-f4c03acb/6c6c94a6ef064fe898cfa895fe5a38f5/getList";
|
|
85
|
+
const response = await fetch(`https://api.yuntooai.com${apiUrl}`);
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**新代码**:
|
|
89
|
+
|
|
90
|
+
```diff
|
|
91
|
+
const apiUrl =
|
|
92
|
+
+ "/api/app-c4055413/76a873945291498498737bc85677983d/getList";
|
|
93
|
+
const response = await fetch(`https://runtime.lovrabet.com${apiUrl}`);
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 2. 配置文件更新
|
|
97
|
+
|
|
98
|
+
如果你有配置文件存储API地址模板,需要更新:
|
|
99
|
+
|
|
100
|
+
**原模板**:
|
|
101
|
+
|
|
102
|
+
```diff
|
|
103
|
+
{
|
|
104
|
+
- "apiTemplate": "/{callMethod}/runtime/{tenant}/{appCode}/{datasetCode}/{apiName}"
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**新模板**:
|
|
109
|
+
|
|
110
|
+
```diff
|
|
111
|
+
{
|
|
112
|
+
+ "apiTemplate": "/api/{appCode}/{datasetCode}/{apiName}"
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 3. API解析逻辑更新
|
|
117
|
+
|
|
118
|
+
如果你的代码中有解析API地址的逻辑:
|
|
119
|
+
|
|
120
|
+
**原解析逻辑**:
|
|
121
|
+
|
|
122
|
+
```diff
|
|
123
|
+
const urlParts = apiUrl.split("/");
|
|
124
|
+
- const callMethod = urlParts[1]; // smartapi/dbapi
|
|
125
|
+
- const runtime = urlParts[2]; // runtime
|
|
126
|
+
- const tenant = urlParts[3]; // 租户名称
|
|
127
|
+
- const appCode = urlParts[4]; // 应用代码
|
|
128
|
+
- const datasetCode = urlParts[5]; // 数据集代码
|
|
129
|
+
- const apiName = urlParts[6]; // 接口名称
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**新解析逻辑**:
|
|
133
|
+
|
|
134
|
+
```diff
|
|
135
|
+
const urlParts = apiUrl.split("/");
|
|
136
|
+
+ const apiPrefix = urlParts[1]; // api (固定)
|
|
137
|
+
+ const appCode = urlParts[2]; // 应用代码
|
|
138
|
+
+ const datasetCode = urlParts[3]; // 数据集代码
|
|
139
|
+
+ const apiName = urlParts[4]; // 接口名称
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## ⚠️ 重要提醒
|
|
145
|
+
|
|
146
|
+
### 1. 兼容性说明
|
|
147
|
+
|
|
148
|
+
- 旧格式API地址将在 **2024年12月31日** 后停止支持
|
|
149
|
+
- 请务必在此日期前完成所有API地址的更新
|
|
150
|
+
|
|
151
|
+
### 2. 测试验证
|
|
152
|
+
|
|
153
|
+
更新API地址后,请务必进行以下验证:
|
|
154
|
+
|
|
155
|
+
- ✅ 接口调用正常
|
|
156
|
+
- ✅ 数据返回格式一致
|
|
157
|
+
- ✅ 权限验证通过
|
|
158
|
+
- ✅ 错误处理正常
|
|
159
|
+
|
|
160
|
+
### 3. 权限说明
|
|
161
|
+
|
|
162
|
+
- 新规则下的权限验证机制保持不变
|
|
163
|
+
- 仍需要在 `app.lovrabet.com` 中登录获取权限
|
|
164
|
+
- 跨域请求仍需要配置 `credentials: 'include'`
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 🔗 获取新API地址
|
|
169
|
+
|
|
170
|
+
### 方式一:从管理后台获取
|
|
171
|
+
|
|
172
|
+
1. 访问:`https://app.lovrabet.com/app/{你的appCode}/admin/dataset`
|
|
173
|
+
2. 找到对应的数据集
|
|
174
|
+
3. 复制新格式的API地址
|
|
175
|
+
|
|
176
|
+
### 方式二:API地址转换
|
|
177
|
+
|
|
178
|
+
如果你有原格式的API地址,可以按以下规则转换:
|
|
179
|
+
|
|
180
|
+
**转换规则**:
|
|
181
|
+
|
|
182
|
+
```diff
|
|
183
|
+
- 原: https://api.yuntooai.com/{callMethod}/runtime/{tenant}/{appCode}/{datasetCode}/{apiName}
|
|
184
|
+
+ 新: https://runtime.lovrabet.com/api/{appCode}/{datasetCode}/{apiName}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
**转换示例**:
|
|
188
|
+
|
|
189
|
+
```diff
|
|
190
|
+
- 原: https://api.yuntooai.com/dbapi/runtime/yuntoo/app-f4c03acb/6c6c94a6ef064fe898cfa895fe5a38f5/getList
|
|
191
|
+
+ 新: https://runtime.lovrabet.com/api/app-f4c03acb/6c6c94a6ef064fe898cfa895fe5a38f5/getList
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 📝 更新检查清单
|
|
197
|
+
|
|
198
|
+
请在完成API地址更新后,使用以下清单进行检查:
|
|
199
|
+
|
|
200
|
+
- [ ] 所有API请求地址已更新为新格式
|
|
201
|
+
- [ ] 相关配置文件已更新
|
|
202
|
+
- [ ] API地址解析逻辑已修改
|
|
203
|
+
- [ ] 本地环境测试通过
|
|
204
|
+
- [ ] 生产环境验证通过
|
|
205
|
+
- [ ] 错误处理逻辑正常
|
|
206
|
+
- [ ] 权限验证功能正常
|
|
207
|
+
- [ ] 用户文档已更新(如有)
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
_最后更新时间:2024年9月12日_
|
|
212
|
+
_版本:v2.0_
|