快速开始
本地启动与开发
用最短路径在本地启动 Legendary Invention,并知道常用命令该怎么用。
环境要求
- Java 21
- Maven 3.9+,或仓库自带
./mvnw - Node.js 20+
- pnpm 10+
- Docker,推荐用于 MySQL、Redis 和部署演练
仓库位置
/Users/johntao/Documents/GitHub/legendary-invention先理解本地启动目标
本地开发不需要把自己当成一个要维护一堆独立后端服务的“微服务平台管理员”。当前推荐目标很明确:
- 前端能访问
/api请求能通legendary-server能承载主要业务模块- MySQL、Redis 等基础设施可用
只要这四件事成立,你就已经拥有一个有效的本地开发环境。
最短启动路径
一键启动整套本地环境:
node scripts/start-platform.mjs如果不想重新构建镜像:
node scripts/start-platform.mjs --skip-build停止本地环境:
node scripts/stop-platform.mjs这个启动脚本的价值不是“少打一条命令”,而是它会统一处理本地开发最容易乱掉的几件事:
- 端口检查
- 基础设施复用或拉起
- 后端主入口启动
- 前端开发态启动
- 统一的本地访问路径
常用启动变体
如果你只想复用已有基础设施,不重复拉起:
node scripts/start-platform.mjs --skip-infra如果你只想准备基础设施,不启动服务:
node scripts/start-platform.mjs --skip-services --skip-frontend如果你暂时只看后端接口:
node scripts/start-platform.mjs --skip-frontend只启动后端
构建聚合入口:
./mvnw -pl services/legendary-server -am package直接运行聚合后端:
./mvnw -pl services/legendary-server -am spring-boot:run只启动前端
cd frontend
corepack pnpm install
corepack pnpm dev本地默认地址
- 前端入口:
http://localhost:8000 - 后端入口:
http://localhost:8080 - API 健康检查:
http://localhost:8080/actuator/health - 代理健康检查:
http://localhost:8000/api/health
如果你的本地脚本版本仍带有单独代理入口,可能还会看到 8081。遇到这种情况时,先以脚本实际打印出的地址为准,但业务开发仍要遵守一个原则:前端统一请求 /api,不要直接硬编码后端模块地址。
推荐开发顺序
- 启动本地后端与前端
- 先确认
/api/health返回成功 - 再进入你要修改的模块或页面
- 修改后优先跑最小验证,而不是全量冒烟
第一次启动时建议按这个顺序检查
1. 检查 Java 和 Node 环境
java -version
./mvnw -version
node -v
corepack pnpm -v
docker version2. 启动平台
node scripts/start-platform.mjs3. 检查健康状态
curl http://localhost:8080/actuator/health
curl http://localhost:8000/api/health4. 再进入页面开发或接口调试
如果这一步还没通,就不要急着改业务代码,先把基础启动链路修通。
常用检查命令
后端打包:
./mvnw -DskipTests package前端类型检查:
cd frontend
corepack pnpm typecheck前端测试:
cd frontend
corepack pnpm test指定聚合入口构建:
./mvnw -pl services/legendary-server -am -DskipTests package指定模块编译:
./mvnw -q -pl services/system-service -am -DskipTests compile当前架构下要特别记住的事
- 正式主入口是
legendary-server,不是多进程纯微服务 - 代码目录保留
services/*-service是为了边界清晰和未来可拆分 - 前端永远优先调用
/api下的相对路径,不要直接硬编码服务地址
本地开发时最常见的误区
误区 1:把目录结构误认为当前运行形态
看到 auth-service、message-service、file-service 等目录,并不意味着你今天本地就要分别启动它们。默认开发和调试都围绕聚合入口进行。
误区 2:直接在页面里写真实服务域名
前端如果直接写死后端绝对地址,后面无论本地、测试、Vercel rewrite 还是生产代理都会更难维护。统一用 /api 是为了把环境差异收敛掉。
误区 3:一上来跑全量验证
这个仓库前后端、部署、脚本、观测链路都不短。日常开发更应该先做“最小回归”:
- 改前端,先跑类型检查和目标页面
- 改后端模块,先编译目标模块或聚合入口
- 改部署脚本,再做部署检查
常见本地问题
页面能开,但接口全 401 / 403
优先检查:
- 是否真的走了
/api - 登录态是否恢复
- 当前租户上下文是否正确
- 后端接口是否使用了正确的
permission_key
页面提示服务不可用
优先检查:
legendary-server是否启动成功/api/health是否可访问- 前端代理或本地 rewrite 是否生效
上传类功能失败
优先检查:
- 本地存储目录是否可写
- 相关上传配置是否加载
- 文件模块链路是否正常
建议你在开始改代码前先确认的三件事
- 你改的是前端壳层、业务页面,还是后端 owner 模块
- 你改动是否会影响权限、审计、Outbox 或部署
- 你准备的验证命令是不是足够小、足够快
确认完这三件事,后面的开发会顺很多。