@llryiop/avatar-boot-cli 1.0.0
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/README.md +309 -0
- package/bin/cli.js +3 -0
- package/docs/plans/2026-03-12-avatar-boot-cli-design.md +73 -0
- package/docs/plans/2026-03-12-avatar-boot-cli-plan.md +681 -0
- package/package.json +28 -0
- package/src/index.js +78 -0
- package/src/prompts.js +78 -0
- package/src/template.js +37 -0
- package/src/transform.js +172 -0
- package/src/utils.js +34 -0
- package/templates/.claude/rules/architecture-redlines.md +146 -0
- package/templates/.claude/rules/code-review-standards.md +137 -0
- package/templates/.claude/rules/coding-standards.md +56 -0
- package/templates/.claude/rules/git-commit.md +59 -0
- package/templates/.claude/rules/layered-architecture.md +201 -0
- package/templates/.claude/rules/mybatis-plus.md +263 -0
- package/templates/.claude/rules/tech-stack.md +41 -0
- package/templates/.claude/rules/version.md +467 -0
- package/templates/.claude/settings.local.json +18 -0
- package/templates/.claude/skills/ai-tool-guide/SKILL.md +314 -0
- package/templates/.claude/skills/api-design/SKILL.md +200 -0
- package/templates/.claude/skills/api-doc-generator/SKILL.md +380 -0
- package/templates/.claude/skills/api-service-module-creator/SKILL.md +1114 -0
- package/templates/.claude/skills/avatar-boot-starter-feign/SKILL.md +243 -0
- package/templates/.claude/skills/avatar-boot-starter-job/SKILL.md +437 -0
- package/templates/.claude/skills/avatar-boot-starter-kafka/SKILL.md +580 -0
- package/templates/.claude/skills/avatar-boot-starter-mysql/SKILL.md +572 -0
- package/templates/.claude/skills/avatar-boot-starter-nacos/SKILL.md +901 -0
- package/templates/.claude/skills/avatar-boot-starter-oss/SKILL.md +594 -0
- package/templates/.claude/skills/avatar-boot-starter-redis/SKILL.md +586 -0
- package/templates/.claude/skills/avatar-boot-starter-rocketmq/SKILL.md +662 -0
- package/templates/.claude/skills/avatar-boot-starter-web/SKILL.md +1007 -0
- package/templates/.claude/skills/changelog-generator/SKILL.md +114 -0
- package/templates/.claude/skills/code-review/SKILL.md +239 -0
- package/templates/.claude/skills/crud-generator/SKILL.md +824 -0
- package/templates/.claude/skills/database-design/SKILL.md +377 -0
- package/templates/.claude/skills/deployment-config/SKILL.md +277 -0
- package/templates/.claude/skills/incident-analysis/SKILL.md +241 -0
- package/templates/.claude/skills/integration-test-generator/SKILL.md +496 -0
- package/templates/.claude/skills/prompt-engineering/SKILL.md +249 -0
- package/templates/.claude/skills/requirement-management/SKILL.md +244 -0
- package/templates/.claude/skills/security-audit/SKILL.md +330 -0
- package/templates/.claude/skills/test-case-design/SKILL.md +257 -0
- package/templates/.claude/skills/testing-workflow/SKILL.md +68 -0
- package/templates/.claude/skills/troubleshooting/SKILL.md +240 -0
- package/templates/CLAUDE.md +173 -0
- package/templates/README.md +303 -0
- package/templates/avatar-scaffold-api/pom.xml +41 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/api/LoginFeignClient.java +40 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/constant/LoginConstant.java +21 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/request/LoginRequest.java +17 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/request/RefreshTokenRequest.java +14 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/response/LoginResponse.java +31 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/dto/response/TokenInfoResponse.java +25 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/enums/LoginTypeEnum.java +23 -0
- package/templates/avatar-scaffold-api/src/main/java/com/iflytek/avatar/login/exception/LoginException.java +23 -0
- package/templates/avatar-scaffold-service/k8s-app/Dockerfile +14 -0
- package/templates/avatar-scaffold-service/k8s-app/Dockerfile-arm64 +14 -0
- package/templates/avatar-scaffold-service/packaging/assembly.xml +16 -0
- package/templates/avatar-scaffold-service/pom.xml +150 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/Application.java +21 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/config/LoginConfig.java +20 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/controller/LoginController.java +37 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/converter/LoginConverter.java +54 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/feign/DemoFeign.java +21 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/entity/UserLoginEntity.java +33 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/entity/UserTokenEntity.java +39 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/repository/mapper/UserLoginMapper.java +20 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/service/LoginService.java +22 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/service/impl/LoginServiceImpl.java +43 -0
- package/templates/avatar-scaffold-service/src/main/java/com/iflytek/avatar/login/utils/LoginUtils.java +31 -0
- package/templates/avatar-scaffold-service/src/main/resources/application-dev.yaml +29 -0
- package/templates/avatar-scaffold-service/src/main/resources/application-local.yaml +61 -0
- package/templates/avatar-scaffold-service/src/main/resources/application-prod.yaml +28 -0
- package/templates/avatar-scaffold-service/src/main/resources/application-test.yaml +28 -0
- package/templates/avatar-scaffold-service/src/main/resources/application.yaml +12 -0
- package/templates/pom.xml +98 -0
package/README.md
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Avatar Boot CLI 操作手册
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
|
|
5
|
+
`avatar-boot-cli` 是 AvatarBoot Java 微服务项目的脚手架工具。通过交互式命令行,快速创建一个标准化的 AvatarBoot 微服务项目,包含 API + Service 双模块结构、Maven 配置、环境配置及可选的 AI Agent 配置。
|
|
6
|
+
|
|
7
|
+
## 环境要求
|
|
8
|
+
|
|
9
|
+
| 工具 | 版本要求 | 用途 |
|
|
10
|
+
|------|---------|------|
|
|
11
|
+
| Node.js | >= 18 | 运行 CLI 工具 |
|
|
12
|
+
| Git | >= 2.0 | 克隆模板仓库 |
|
|
13
|
+
| Maven | >= 3.8.6 | 构建生成的项目 |
|
|
14
|
+
| JDK | 21 | 编译运行项目 |
|
|
15
|
+
|
|
16
|
+
## 安装与使用
|
|
17
|
+
|
|
18
|
+
### 方式一:npx 直接运行(推荐)
|
|
19
|
+
|
|
20
|
+
无需安装,直接运行:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx avatar-boot-cli init
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
或指定项目名:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx avatar-boot-cli init my-order-service
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 方式二:全局安装
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npm install -g avatar-boot-cli
|
|
36
|
+
avatar-boot-cli init
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### 方式三:本地运行(开发调试)
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
git clone <本仓库地址>
|
|
43
|
+
cd npx
|
|
44
|
+
npm install
|
|
45
|
+
node bin/cli.js init
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 交互式配置说明
|
|
49
|
+
|
|
50
|
+
运行 `init` 命令后,工具会依次提示以下配置项。**所有配置都可以直接回车跳过,使用默认值。**
|
|
51
|
+
|
|
52
|
+
### 1. 项目名称
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
? 项目名称: (my-avatar-service)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- **默认值:** `my-avatar-service`
|
|
59
|
+
- **命名规则:** 小写字母开头,只能包含小写字母、数字和连字符
|
|
60
|
+
- **示例:** `avatar-order-service`、`avatar-user-center`
|
|
61
|
+
- **影响范围:**
|
|
62
|
+
- 项目根目录名
|
|
63
|
+
- Maven artifactId
|
|
64
|
+
- 子模块目录名(`{项目名}-api`、`{项目名}-service`)
|
|
65
|
+
- `spring.application.name`
|
|
66
|
+
|
|
67
|
+
### 2. Maven groupId
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
? Maven groupId: (com.iflytek.avatar)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
- **默认值:** `com.iflytek.avatar`
|
|
74
|
+
- **命名规则:** 小写字母开头,只能包含小写字母、数字和点号
|
|
75
|
+
- **示例:** `com.iflytek.avatar.order`
|
|
76
|
+
- **影响范围:**
|
|
77
|
+
- pom.xml 中的 `<groupId>`
|
|
78
|
+
- Java 源码的 package 声明和 import 路径
|
|
79
|
+
- 源码目录结构(如 `src/main/java/com/iflytek/avatar/order/`)
|
|
80
|
+
|
|
81
|
+
### 3. Avatar Boot 版本
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
? Avatar Boot 版本: (Use arrow keys)
|
|
85
|
+
❯ v1.0.0
|
|
86
|
+
v1.1.0
|
|
87
|
+
latest (main branch)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- **默认值:** 列表中第一个(最新 tag)
|
|
91
|
+
- **说明:** 工具会自动从 Git 仓库获取可用的版本 tag。如果无法连接仓库,则只显示 `latest (main branch)` 选项
|
|
92
|
+
- **影响范围:** 克隆的模板版本
|
|
93
|
+
|
|
94
|
+
### 4. Starter 模块选择
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
? 选择 Starter 模块: (Press <space> to select, <a> to toggle all)
|
|
98
|
+
◉ avatar-boot-starter-web (Web 基础设施)
|
|
99
|
+
◉ avatar-boot-starter-nacos (服务注册与配置)
|
|
100
|
+
◯ avatar-boot-starter-feign (服务间调用)
|
|
101
|
+
◯ avatar-boot-starter-mysql (MySQL 数据库)
|
|
102
|
+
◯ avatar-boot-starter-redis (Redis 缓存)
|
|
103
|
+
◯ avatar-boot-starter-kafka (Kafka 消息队列)
|
|
104
|
+
◯ avatar-boot-starter-rocketmq (RocketMQ 消息队列)
|
|
105
|
+
◯ avatar-boot-starter-job (XXL-Job 任务调度)
|
|
106
|
+
◯ avatar-boot-starter-oss (对象存储)
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
- **默认选中:** `web`、`nacos`
|
|
110
|
+
- **操作方式:**
|
|
111
|
+
- `空格键` 选中/取消单个模块
|
|
112
|
+
- `a` 全选/全不选
|
|
113
|
+
- `回车` 确认选择
|
|
114
|
+
- **影响范围:** service 模块 pom.xml 中的依赖(选中的取消注释,未选中的注释掉)
|
|
115
|
+
|
|
116
|
+
**各 Starter 功能说明:**
|
|
117
|
+
|
|
118
|
+
| Starter | 说明 | 典型场景 |
|
|
119
|
+
|---------|------|---------|
|
|
120
|
+
| `web` | Web 基础设施,含统一返回格式、全局异常处理 | 所有 Web 服务必选 |
|
|
121
|
+
| `nacos` | Nacos 服务注册与配置中心 | 微服务环境必选 |
|
|
122
|
+
| `feign` | 基于 OpenFeign 的服务间调用 | 需要调用其他微服务 |
|
|
123
|
+
| `mysql` | MySQL 数据库 + MyBatis Plus | 需要持久化存储 |
|
|
124
|
+
| `redis` | Redis 缓存 | 需要缓存、分布式锁 |
|
|
125
|
+
| `kafka` | Kafka 消息队列 | 异步消息、事件驱动 |
|
|
126
|
+
| `rocketmq` | RocketMQ 消息队列 | 异步消息(阿里系) |
|
|
127
|
+
| `job` | XXL-Job 分布式任务调度 | 定时任务、批处理 |
|
|
128
|
+
| `oss` | 对象存储 | 文件上传下载 |
|
|
129
|
+
|
|
130
|
+
### 5. 示例代码
|
|
131
|
+
|
|
132
|
+
```
|
|
133
|
+
? 是否生成示例代码 (login 模块): (Y/n)
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
- **默认值:** 是(Y)
|
|
137
|
+
- **说明:** 生成一个完整的 login 示例模块,包含 Controller、Service、Mapper、DTO、Feign Client 等标准分层代码,可作为业务开发参考
|
|
138
|
+
- **影响范围:**
|
|
139
|
+
- `{项目名}-api/src/main/java/.../login/` — Feign 接口、DTO、常量、枚举、异常
|
|
140
|
+
- `{项目名}-service/src/main/java/.../login/` — Controller、Service、Mapper、Entity、Converter、Utils
|
|
141
|
+
|
|
142
|
+
### 6. Nacos 地址(选了 nacos 模块时出现)
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
? Nacos 地址: (127.0.0.1:8848)
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
- **默认值:** `127.0.0.1:8848`
|
|
149
|
+
- **示例:** `172.29.242.247:8848`
|
|
150
|
+
- **影响范围:** `application-dev.yaml` 中的 `spring.cloud.nacos.server-addr`
|
|
151
|
+
|
|
152
|
+
### 7. 数据库地址(选了 mysql 模块时出现)
|
|
153
|
+
|
|
154
|
+
```
|
|
155
|
+
? 数据库地址 (host:port/dbname): (localhost:3306/avatar)
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
- **默认值:** `localhost:3306/avatar`
|
|
159
|
+
- **示例:** `192.168.1.100:3306/order_db`
|
|
160
|
+
- **影响范围:** `application-dev.yaml` 中的数据库连接配置
|
|
161
|
+
|
|
162
|
+
### 8. AI Agent 配置
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
? 是否生成 .claude/ AI Agent 配置: (Y/n)
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
- **默认值:** 是(Y)
|
|
169
|
+
- **说明:** 生成 `.claude/` 目录和 `CLAUDE.md`,包含项目规则(架构规范、编码标准、技术栈约束等)和技能定义,让 Claude 等 AI 编程助手更好地理解项目
|
|
170
|
+
- **影响范围:**
|
|
171
|
+
- `.claude/rules/` — 8 个规则文件(架构红线、编码规范、分层架构等)
|
|
172
|
+
- `.claude/skills/` — 24 个技能定义(模块创建、CRUD 生成、API 设计等)
|
|
173
|
+
- `CLAUDE.md` — 项目总览文档
|
|
174
|
+
|
|
175
|
+
### 9. 服务端口
|
|
176
|
+
|
|
177
|
+
```
|
|
178
|
+
? 服务端口: (8888)
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
- **默认值:** `8888`
|
|
182
|
+
- **影响范围:** `application.yaml` 中的 `server.port`
|
|
183
|
+
|
|
184
|
+
## 完整使用示例
|
|
185
|
+
|
|
186
|
+
### 示例 1:快速创建(全部默认值)
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
npx avatar-boot-cli init my-order-service
|
|
190
|
+
# 然后一路回车
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
生成结果:
|
|
194
|
+
|
|
195
|
+
```
|
|
196
|
+
my-order-service/
|
|
197
|
+
├── my-order-service-api/ # API 模块
|
|
198
|
+
│ ├── pom.xml
|
|
199
|
+
│ └── src/main/java/com/iflytek/avatar/
|
|
200
|
+
│ └── login/ # 示例模块
|
|
201
|
+
│ ├── api/ # Feign 接口
|
|
202
|
+
│ ├── dto/ # 请求/响应对象
|
|
203
|
+
│ ├── constant/ # 常量
|
|
204
|
+
│ ├── enums/ # 枚举
|
|
205
|
+
│ └── exception/ # 自定义异常
|
|
206
|
+
├── my-order-service-service/ # Service 模块
|
|
207
|
+
│ ├── pom.xml
|
|
208
|
+
│ └── src/main/java/com/iflytek/avatar/
|
|
209
|
+
│ ├── Application.java # 启动类
|
|
210
|
+
│ └── login/ # 示例模块
|
|
211
|
+
│ ├── controller/ # REST 接口
|
|
212
|
+
│ ├── service/ # 业务逻辑
|
|
213
|
+
│ ├── repository/ # 数据访问 (Mapper + Entity)
|
|
214
|
+
│ ├── converter/ # 对象转换
|
|
215
|
+
│ ├── config/ # 模块配置
|
|
216
|
+
│ ├── feign/ # Feign 调用
|
|
217
|
+
│ └── utils/ # 工具类
|
|
218
|
+
├── .claude/ # AI Agent 配置
|
|
219
|
+
├── CLAUDE.md
|
|
220
|
+
└── pom.xml # 父 POM
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 示例 2:自定义配置
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
npx avatar-boot-cli init
|
|
227
|
+
|
|
228
|
+
? 项目名称: avatar-user-center
|
|
229
|
+
? Maven groupId: com.iflytek.avatar.user
|
|
230
|
+
? Avatar Boot 版本: v1.0.0
|
|
231
|
+
? 选择 Starter 模块: web, nacos, feign, mysql, redis
|
|
232
|
+
? 是否生成示例代码 (login 模块): No
|
|
233
|
+
? Nacos 地址: 172.29.242.247:8848
|
|
234
|
+
? 数据库地址 (host:port/dbname): 172.29.242.247:3306/user_center
|
|
235
|
+
? 是否生成 .claude/ AI Agent 配置: Yes
|
|
236
|
+
? 服务端口: 9090
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
## 项目创建后
|
|
240
|
+
|
|
241
|
+
### 1. 进入项目目录
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
cd my-order-service
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 2. 初始化 Git 仓库
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
git init
|
|
251
|
+
git add .
|
|
252
|
+
git commit -m "init: 初始化项目"
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### 3. 编译项目
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
mvn clean compile
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
### 4. 本地启动(需要 Nacos)
|
|
262
|
+
|
|
263
|
+
```bash
|
|
264
|
+
cd my-order-service-service
|
|
265
|
+
mvn spring-boot:run -Dspring-boot.run.profiles=dev
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### 5. 创建新业务模块
|
|
269
|
+
|
|
270
|
+
参考 login 示例模块的结构,在对应目录下创建新的业务包:
|
|
271
|
+
|
|
272
|
+
```
|
|
273
|
+
# API 模块中创建
|
|
274
|
+
{项目名}-api/src/main/java/{groupId路径}/{模块名}/
|
|
275
|
+
├── api/ # Feign 接口
|
|
276
|
+
├── dto/request/ # 请求 DTO
|
|
277
|
+
├── dto/response/ # 响应 DTO
|
|
278
|
+
├── constant/ # 常量
|
|
279
|
+
├── enums/ # 枚举
|
|
280
|
+
└── exception/ # 异常
|
|
281
|
+
|
|
282
|
+
# Service 模块中创建
|
|
283
|
+
{项目名}-service/src/main/java/{groupId路径}/{模块名}/
|
|
284
|
+
├── controller/ # Controller
|
|
285
|
+
├── service/ # Service 接口
|
|
286
|
+
├── service/impl/ # Service 实现
|
|
287
|
+
├── repository/mapper/ # MyBatis Mapper
|
|
288
|
+
├── repository/entity/ # 数据库实体
|
|
289
|
+
├── converter/ # 对象转换器
|
|
290
|
+
└── config/ # 配置类
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
## 常见问题
|
|
294
|
+
|
|
295
|
+
### Q: 克隆模板失败?
|
|
296
|
+
|
|
297
|
+
检查网络连接是否能访问 `code.iflytek.com`,确保 Git 已配置正确的凭据。
|
|
298
|
+
|
|
299
|
+
### Q: 目录已存在?
|
|
300
|
+
|
|
301
|
+
工具不会覆盖已有目录。删除同名目录后重新运行,或使用其他项目名。
|
|
302
|
+
|
|
303
|
+
### Q: 版本列表为空?
|
|
304
|
+
|
|
305
|
+
如果无法连接 Git 仓库获取 tag,工具会显示 `latest (main branch)` 选项,使用主分支最新代码。
|
|
306
|
+
|
|
307
|
+
### Q: 如何添加新的 Starter 依赖?
|
|
308
|
+
|
|
309
|
+
项目创建后,手动编辑 `{项目名}-service/pom.xml`,取消注释或添加对应的 `avatar-boot-starter-*` 依赖即可。
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Avatar Boot CLI 设计文档
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
`avatar-boot-cli` 是一个 Node.js CLI 工具,用于初始化 AvatarBoot Java 微服务项目。通过 `npx avatar-boot-cli init` 交互式创建项目,从 Git 仓库克隆 avatar-scaffold-project 模板,根据用户配置替换项目内容。
|
|
6
|
+
|
|
7
|
+
## 核心决策
|
|
8
|
+
|
|
9
|
+
- **技术栈**: Node.js CLI(npx 风格)
|
|
10
|
+
- **模板来源**: 从 Git 仓库克隆 avatar-scaffold-project
|
|
11
|
+
- **替换策略**: 字符串替换(方案 A),模板项目本身可运行
|
|
12
|
+
- **配置方式**: 全部可选,支持跳过走默认值
|
|
13
|
+
- **AI 配置**: 保持 `.claude/` 目录结构(rules + skills)
|
|
14
|
+
- **子命令**: 仅 `init`,支持选择版本
|
|
15
|
+
|
|
16
|
+
## 项目结构
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
npx/
|
|
20
|
+
├── package.json # npm 包,bin: avatar-boot-cli
|
|
21
|
+
├── bin/
|
|
22
|
+
│ └── cli.js # 入口 #!/usr/bin/env node
|
|
23
|
+
├── src/
|
|
24
|
+
│ ├── index.js # 主逻辑
|
|
25
|
+
│ ├── prompts.js # 交互式问答
|
|
26
|
+
│ ├── clone.js # Git 克隆
|
|
27
|
+
│ ├── transform.js # 字符串替换
|
|
28
|
+
│ └── utils.js # 工具函数
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 交互流程
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
npx avatar-boot-cli init [project-name]
|
|
35
|
+
→ 项目名称(默认: my-avatar-service)
|
|
36
|
+
→ groupId(默认: com.iflytek.avatar)
|
|
37
|
+
→ Avatar Boot 版本(从 Git tag 列表选择)
|
|
38
|
+
→ Starter 模块多选(web✓, nacos✓, feign, mysql, redis, kafka, rocketmq, job, oss)
|
|
39
|
+
→ 是否生成示例代码(默认: 是)
|
|
40
|
+
→ Nacos 地址(默认: 127.0.0.1:8848)
|
|
41
|
+
→ 数据库连接(如选了 mysql,默认: localhost:3306/avatar)
|
|
42
|
+
→ 是否生成 .claude/ AI 配置(默认: 是)
|
|
43
|
+
→ 克隆 → 替换 → 清理 .git → 完成
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 替换规则
|
|
47
|
+
|
|
48
|
+
| 目标 | 替换内容 |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| pom.xml `<artifactId>` | `avatar-template` → 项目名 |
|
|
51
|
+
| pom.xml `<groupId>` | `com.iflytek.avatar` → 用户 groupId |
|
|
52
|
+
| pom.xml starter 依赖 | 根据选择注释/取消注释 |
|
|
53
|
+
| 模块目录名 | `avatar-scaffold-api/` → `{project}-api/` |
|
|
54
|
+
| 模块目录名 | `avatar-scaffold-service/` → `{project}-service/` |
|
|
55
|
+
| Java 包路径 | `com/iflytek/avatar` → groupId 对应路径 |
|
|
56
|
+
| package 声明 | 替换 Java 文件中 package 语句 |
|
|
57
|
+
| import 声明 | 替换 Java 文件中 import 语句 |
|
|
58
|
+
| application.yaml | 替换 spring.application.name、nacos 地址等 |
|
|
59
|
+
| 示例代码 | 如不需要,删除 login 模块 |
|
|
60
|
+
| .claude/ 目录 | 如不需要,删除 |
|
|
61
|
+
| .git/ 目录 | 始终删除 |
|
|
62
|
+
|
|
63
|
+
## 版本选择
|
|
64
|
+
|
|
65
|
+
通过 `git ls-remote --tags` 获取仓库 tag 列表,用户选择版本后用 `git clone --branch <tag>` 克隆。
|
|
66
|
+
|
|
67
|
+
## 依赖
|
|
68
|
+
|
|
69
|
+
- `commander` — CLI 命令解析
|
|
70
|
+
- `inquirer` — 交互式问答
|
|
71
|
+
- `chalk` — 终端彩色输出
|
|
72
|
+
- `ora` — 加载动画
|
|
73
|
+
- `glob` — 文件匹配
|