flu-cli 0.0.5 → 2.0.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.
Files changed (49) hide show
  1. package/CLI.md +512 -0
  2. package/README.md +70 -260
  3. package/config/dev.config.js +56 -0
  4. package/config/templates.js +147 -0
  5. package/index.js +177 -81
  6. package/lib/commands/add.js +595 -0
  7. package/lib/commands/cache.js +99 -0
  8. package/lib/commands/completion.js +92 -0
  9. package/lib/commands/config.js +70 -0
  10. package/lib/commands/newClack.js +399 -0
  11. package/lib/commands/snippets.js +39 -0
  12. package/lib/commands/template.js +113 -0
  13. package/lib/commands/templates.js +84 -0
  14. package/lib/generators/model_generator.js +303 -0
  15. package/lib/generators/page_generator.js +322 -0
  16. package/lib/generators/project_generator.js +96 -0
  17. package/lib/generators/service_generator.js +408 -0
  18. package/lib/generators/state_manager_generator.js +402 -0
  19. package/lib/generators/viewmodel_generator.js +115 -0
  20. package/lib/generators/widget_generator.js +104 -0
  21. package/lib/templates/templateCopier.js +296 -0
  22. package/lib/templates/templateManager.js +191 -0
  23. package/lib/utils/config.js +99 -0
  24. package/lib/utils/flutterHelper.js +85 -0
  25. package/lib/utils/index_updater.js +69 -0
  26. package/lib/utils/logger.js +57 -0
  27. package/lib/utils/project_detector.js +227 -0
  28. package/lib/utils/snippet_loader.js +32 -0
  29. package/lib/utils/string_helper.js +56 -0
  30. package/lib/utils/templateSelectorEnquirer.js +203 -0
  31. package/package.json +34 -7
  32. package/release.sh +107 -0
  33. package/scripts/e2e-state-tests.js +116 -0
  34. package/scripts/sync-base-to-templates.js +108 -0
  35. package/scripts/workspace-clone-all.sh +101 -0
  36. package/scripts/workspace-status-all.sh +112 -0
  37. package/templates/README.md +138 -0
  38. package/templates/base_files/base_list_page.dart.template +174 -0
  39. package/templates/base_files/base_list_viewmodel.dart.template +134 -0
  40. package/templates/base_files/base_page.dart.template +251 -0
  41. package/templates/base_files/base_viewmodel.dart.template +77 -0
  42. package/templates/base_files/theme/status_views_theme.dart.template +46 -0
  43. package/templates/snippets/dart.code-snippets +392 -0
  44. package/lib/createProject.js +0 -220
  45. package/lib/flutterProjectCreator.js +0 -80
  46. package/lib/libCopier.js +0 -368
  47. package/lib/userInteraction.js +0 -274
  48. package/lib/utils.js +0 -200
  49. package/publish.sh +0 -29
package/CLI.md ADDED
@@ -0,0 +1,512 @@
1
+ # Flu-CLI v2 命令参考
2
+
3
+ > Flutter MVVM 脚手架工具 - 快速生成项目和代码
4
+
5
+ ## 快速开始
6
+
7
+ ```bash
8
+ # 创建新项目
9
+ flu-cli new my_app
10
+
11
+ # 添加页面
12
+ flu-cli add page home
13
+
14
+ # 查看帮助
15
+ flu-cli --help
16
+ ```
17
+
18
+ ## 新增特性(v2)
19
+
20
+ - 自定义模板管理:支持从本地目录或 Git 仓库添加模板,并在交互式创建时与内置模板一起选择。
21
+ - 项目生成配置:支持在项目根使用 `.flu-cli.json` 配置生成器默认行为(路径、页面类型、是否绑定 ViewModel 等)。
22
+ - 生成联动:CLI 与 VSCode 扩展均会读取 `.flu-cli.json`,保持生成路径与风格一致。
23
+ - Riverpod 原生支持:可选择 Riverpod 状态管理并生成原生风格的 VM/页面(如果模板包含入口片段会自动包裹 `ProviderScope`)。
24
+
25
+ ## 命令列表
26
+
27
+ ### 1. `new` - 创建项目
28
+
29
+ 创建一个新的 Flutter 项目,支持多种模板和状态管理器。
30
+
31
+ **选项:**
32
+
33
+ ```bash
34
+ flu-cli new [项目名称] [选项]
35
+ flu-cli n [项目名称] # 简写
36
+ ```
37
+
38
+ **选项:**
39
+
40
+ - `-t, --template <type>` - 模板类型: `lite`, `modular`, `clean`
41
+ - `-s, --state <type>` - 状态管理器: `default`, `provider`, `getx`, `riverpod`
42
+ - `-d, --dir <path>` - 项目存放目录(默认:当前目录)
43
+ - `--no-cache` - 不使用缓存,强制从 Git 拉取
44
+ - `--remote` - 使用远程 Gitee 模板(默认使用本地模板)
45
+
46
+ **说明:**
47
+
48
+ - 交互式创建时会展示“内置模板 + 你通过 `template add` 保存的自定义模板”,可直接选择。
49
+ - 模板复制后会执行占位符替换(如 `{{projectName}}`、`{{package_name}}`)并校正 `pubspec.yaml` 的 `name`。
50
+ - 已存在 `.flu-cli.json` 的项目中再次生成文件时,会遵循其中的路径与风格设置。
51
+
52
+ **示例:**
53
+
54
+ ```bash
55
+ # 交互式创建(推荐)
56
+ flu-cli new
57
+
58
+ # 指定项目名和模板
59
+ flu-cli new my_app -t lite
60
+
61
+ # 指定状态管理器
62
+ flu-cli new my_app -s getx
63
+
64
+ # 完整配置
65
+ flu-cli new my_app -t modular -s provider -d ~/projects
66
+ ```
67
+
68
+ ---
69
+
70
+ ### 2. `add` - 添加组件
71
+
72
+ 在当前项目中添加各种代码组件。
73
+
74
+ **用法:**
75
+
76
+ ```bash
77
+ flu-cli add <类型> <名称> [选项]
78
+ flu-cli a <类型> <名称> # 简写
79
+ ```
80
+
81
+ **支持的类型及别名:**
82
+
83
+ | 类型 | 别名 | 说明 |
84
+ | ----------- | ----- | ------------ |
85
+ | `page` | `p` | 页面组件 |
86
+ | `widget` | `w` | 通用组件 |
87
+ | `component` | `c` | 业务组件 |
88
+ | `viewmodel` | `v` | ViewModel |
89
+ | `service` | `s` | 服务层 |
90
+ | `model` | `m` | 数据模型 |
91
+ | `module` | `mod` | 完整功能模块 |
92
+
93
+ **选项:**
94
+
95
+ - `-f, --feature <name>` - 所属功能模块(仅 modular/clean 模式)
96
+ - `--stateful` - 创建 StatefulWidget
97
+ - `--stateless` - 强制创建 StatelessWidget
98
+ - `--list-page` - 创建列表页 (BaseListPage)
99
+ - `--no-vm` - 不生成 ViewModel(仅 page 类型)
100
+ - `--type <type>` - Service 类型: `api`, `storage`, `auth`(仅 service 类型)
101
+ - `--json <file>` - 从 JSON 文件生成(仅 model 类型)
102
+ - `--list` - 查看支持的类型列表
103
+
104
+ **说明:**
105
+
106
+ - 若项目根存在 `.flu-cli.json`,`add` 会遵循其中的路径与默认类型(如 `generators.page.path`、`defaultType`、`withViewModel`)。
107
+ - 在 `modular/clean` 模板下可用 `-f <feature>` 指定模块以生成到模块目录结构(如 `lib/features/user/...`)。
108
+
109
+ **示例:**
110
+
111
+ ```bash
112
+ # 添加页面(自动生成 ViewModel)
113
+ flu-cli add page home
114
+ flu-cli add p home # 简写
115
+
116
+ # 添加列表页
117
+ flu-cli add page user_list --list-page
118
+
119
+ # 添加无状态页面
120
+ flu-cli add page about --stateless --no-vm
121
+
122
+ # 添加组件
123
+ flu-cli add widget custom_button
124
+ flu-cli add w custom_button # 简写
125
+
126
+ # 添加 Service
127
+ flu-cli add service api --type api
128
+ flu-cli add s auth --type auth # 简写 + 指定类型
129
+
130
+ # 添加 Model
131
+ flu-cli add model user
132
+ flu-cli add m user # 简写
133
+
134
+ # 在功能模块下添加(modular/clean 模式)
135
+ flu-cli add page product -f shop
136
+ ```
137
+
138
+ ### 2.5 `service` - 服务层
139
+
140
+ 生成 API、存储等服务。
141
+
142
+ **选项:**
143
+
144
+ - `-f, --feature <name>` - 指定功能模块
145
+ - `--type <type>` - 服务类型: api, storage, auth (默认: api) [**已废弃**: 默认生成基础 Service 结构]
146
+
147
+ **示例:**
148
+
149
+ ```bash
150
+ # 生成 User 服务
151
+ flu-cli add service user
152
+
153
+ # 在 auth 模块中生成 AuthService
154
+ flu-cli add service auth --feature auth
155
+ ```
156
+
157
+ ---
158
+
159
+ ### 3. `templates` - 模板管理
160
+
161
+ 查看可用模板列表或指定模板的详细信息。
162
+
163
+ **用法:**
164
+
165
+ ```bash
166
+ flu-cli templates [模板名称]
167
+ flu-cli t [模板名称] # 简写
168
+ ```
169
+
170
+ **示例:**
171
+
172
+ ```bash
173
+ # 查看所有模板
174
+ flu-cli templates
175
+
176
+ # 查看指定模板详情
177
+ flu-cli templates lite
178
+ flu-cli t modular # 简写
179
+ ```
180
+
181
+ ---
182
+
183
+ ### 9. `template` - 自定义模板管理(新增)
184
+
185
+ 用于管理你自己的项目模板,支持从本地目录或 Git 仓库新增模板,并持久化到 `~/.flu-cli/config.json`。在交互式创建项目时,这些模板会与内置模板一起展示并可直接选择。
186
+
187
+ **用法:**
188
+
189
+ ```bash
190
+ flu-cli template # 查看所有自定义模板(同 list)
191
+ flu-cli template list # 列出所有模板
192
+ flu-cli template add <id> <source> [选项]
193
+ flu-cli template remove <id>
194
+ ```
195
+
196
+ **选项:**
197
+
198
+ - `--local` 使用本地目录作为模板(`source` 为路径)
199
+ - `-n, --name <name>` 显示名称(可选)
200
+ - `-b, --branch <branch>` Git 模板分支(默认 `main`)
201
+ - `-d, --description <text>` 模板描述
202
+ - `-f, --force` 覆盖已存在的同名模板
203
+
204
+ **示例:**
205
+
206
+ ```bash
207
+ # 添加本地模板
208
+ flu-cli template add my-lite /path/to/my-template --local -n "我的 Lite 模板" -d "带业务框架的轻量模板"
209
+
210
+ # 添加 Git 模板
211
+ flu-cli template add company-clean https://github.com/org/clean-template.git -b main -n "公司 Clean 模板"
212
+
213
+ # 列出/移除模板
214
+ flu-cli template list
215
+ flu-cli template remove my-lite
216
+ ```
217
+
218
+ **说明:**
219
+
220
+ - 模板会缓存到 `~/.flu-cli/templates/<id>/`,创建项目时会从缓存复制。
221
+ - 交互式 `flu-cli new` 会把自定义模板和内置模板一起展示,并支持预览说明。
222
+ - 选择 Git 模板时会从远端克隆到缓存目录;选择本地模板时会直接复制到缓存目录。
223
+
224
+ ---
225
+
226
+ ### 10. `config` - 项目生成配置(新增)
227
+
228
+ 初始化并管理项目根目录下的 `.flu-cli.json`,用于声明生成器的默认行为(路径、页面类型、是否绑定 ViewModel 等)。VSCode 扩展与 v2 的生成命令都会读取该文件。
229
+
230
+ **用法:**
231
+
232
+ ```bash
233
+ flu-cli config init [选项]
234
+ ```
235
+
236
+ **选项:**
237
+
238
+ - `-d, --dir <path>` 目标项目目录(默认当前目录)
239
+ - `-f, --force` 覆盖已存在的配置文件
240
+
241
+ **示例:**
242
+
243
+ ```bash
244
+ # 在当前项目生成配置
245
+ flu-cli config init
246
+
247
+ # 指定项目目录并覆盖旧配置
248
+ flu-cli config init -d ~/projects/my_app -f
249
+ ```
250
+
251
+ **.flu-cli.json 示例(简化):**
252
+
253
+ ```json
254
+ {
255
+ "generators": {
256
+ "page": {
257
+ "path": "lib/pages",
258
+ "defaultType": "stateful",
259
+ "withViewModel": true
260
+ },
261
+ "viewModel": {
262
+ "path": "lib/viewmodels"
263
+ },
264
+ "model": {
265
+ "path": "lib/models"
266
+ }
267
+ }
268
+ }
269
+ ```
270
+
271
+ **说明:**
272
+
273
+ - 初始化时会根据项目模板(lite/modular/clean)生成匹配的默认路径。
274
+ - VSCode 插件的“生成文件”命令会优先使用 `.flu-cli.json` 中的设置,无需每次选择类型。
275
+ - 可在自定义模板中提供示例 `.flu-cli.json`,在创建后运行 `flu-cli config init -f` 以覆盖为团队约定。
276
+
277
+ ---
278
+
279
+ ### 5. `update-templates` - 更新模板缓存
280
+
281
+ 更新本地模板缓存到最新版本。
282
+
283
+ **用法:**
284
+
285
+ ```bash
286
+ flu-cli update-templates [模板名称]
287
+ flu-cli u [模板名称] # 简写
288
+ ```
289
+
290
+ **选项:**
291
+
292
+ - `--force` - 强制刷新并清理未跟踪文件
293
+
294
+ **示例:**
295
+
296
+ ```bash
297
+ # 更新所有模板
298
+ flu-cli update-templates
299
+
300
+ # 更新指定模板
301
+ flu-cli u lite # 简写
302
+
303
+ # 强制刷新
304
+ flu-cli update-templates --force
305
+ ```
306
+
307
+ ---
308
+
309
+ ### 6. `cache` - 缓存管理
310
+
311
+ 管理本地模板缓存。
312
+
313
+ **用法:**
314
+
315
+ ```bash
316
+ flu-cli cache <action>
317
+ flu-cli c <action> # 简写
318
+ ```
319
+
320
+ **支持的操作:**
321
+
322
+ - `clean` - 清理缓存
323
+
324
+ **示例:**
325
+
326
+ ```bash
327
+ # 清理缓存
328
+ flu-cli cache clean
329
+ flu-cli c clean # 简写
330
+ ```
331
+
332
+ ---
333
+
334
+ ### 7. `completion` - 自动补全
335
+
336
+ 生成 Shell 自动补全脚本(支持 Bash/Zsh)。
337
+
338
+ **用法:**
339
+
340
+ ```bash
341
+ flu-cli completion
342
+ flu-cli comp # 简写
343
+ ```
344
+
345
+ **安装方法:**
346
+
347
+ ```bash
348
+ # Zsh
349
+ flu-cli completion >> ~/.zshrc
350
+ source ~/.zshrc
351
+
352
+ # Bash
353
+ flu-cli completion >> ~/.bashrc
354
+ source ~/.bashrc
355
+ ```
356
+
357
+ ---
358
+
359
+ ## 常见问题 (FAQ)
360
+
361
+ **Q: `add page` 默认生成的代码不符合我的项目结构怎么办?**
362
+
363
+ A: Flu CLI 是为特定架构(MVVM + Provider)设计的。如果您使用完全自定义的架构,建议:
364
+
365
+ 1. 使用 `--no-vm` 仅生成页面。
366
+ 2. 或者,Fork 本项目并修改模板代码以适配您的团队规范。
367
+ 3. 利用 VSCode 插件自带的代码片段 (Snippets) 快速编写代码,而不是依赖 CLI 生成。
368
+
369
+ **Q: 为什么生成的 Service 很简单?**
370
+
371
+ A: 我们移除了原来复杂的 Service 模板,只生成最基础的类结构。这样您可以自由选择使用 `http`, `dio` 还是其他网络库,而不受 CLI 预设逻辑的限制。
372
+
373
+ ---
374
+
375
+ ## 常见工作流
376
+
377
+ ### 创建新项目
378
+
379
+ ```bash
380
+ flu-cli new my_app
381
+ cd my_app
382
+ flutter pub get
383
+ flu-cli add page home
384
+ flu-cli add page user_list --list-page
385
+ ```
386
+
387
+ ### 使用自定义模板创建项目
388
+
389
+ ````bash
390
+ # 添加模板(本地或 Git)
391
+ flu-cli template add my-lite /path/to/my-template --local
392
+ # 或
393
+ flu-cli template add company-clean https://github.com/org/clean-template.git -b main
394
+
395
+ # 交互式选择自定义模板并创建
396
+ flu-cli new
397
+
398
+ # 初始化项目生成配置(让 VSCode/CLI 生成遵循你的路径约定)
399
+ flu-cli config init
400
+
401
+ ### 基于配置快速生成页面/VM
402
+ ```bash
403
+ # 初始化配置后:
404
+ flu-cli add page home # 路径/类型按 .flu-cli.json 生效
405
+ flu-cli add viewmodel home # VM 路径按配置生效
406
+ flu-cli add model user # Model 路径按配置生效
407
+ ````
408
+
409
+ ### 更新模板缓存与故障排除
410
+
411
+ ```bash
412
+ # 更新缓存到最新
413
+ flu-cli update-templates [模板ID]
414
+
415
+ # 模板拉取失败或缓存异常
416
+ flu-cli cache clean
417
+ flu-cli new my_app --no-cache
418
+ ```
419
+
420
+ ````
421
+
422
+ ### 在现有项目中使用
423
+
424
+ ```bash
425
+ cd existing_project
426
+
427
+ # 初始化配置文件
428
+ flu-cli config init
429
+
430
+ # 添加组件
431
+ flu-cli add page settings
432
+ flu-cli add service api
433
+ ````
434
+
435
+ ### Modular 架构项目
436
+
437
+ ```bash
438
+ flu-cli new my_app -t modular
439
+ cd my_app
440
+
441
+ # 在 shop 模块下添加页面
442
+ flu-cli add page product -f shop
443
+ flu-cli add page cart -f shop
444
+
445
+ # 在 user 模块下添加页面
446
+ flu-cli add page profile -f user
447
+ ```
448
+
449
+ ---
450
+
451
+ ## 全局选项
452
+
453
+ 所有命令都支持以下选项:
454
+
455
+ - `-V, --version` - 查看版本号
456
+ - `-h, --help` - 查看帮助信息
457
+
458
+ **示例:**
459
+
460
+ ```bash
461
+ flu-cli --version
462
+ flu-cli add --help
463
+ ```
464
+
465
+ ---
466
+
467
+ ## 配置文件
468
+
469
+ Flu-CLI 会在以下位置存储配置:
470
+
471
+ - **缓存目录**: `~/.flu-cli/cache/`
472
+ - **配置文件**: `~/.flu-cli/config.json`
473
+
474
+ ---
475
+
476
+ ## 故障排除
477
+
478
+ ### 命令卡住
479
+
480
+ 如果命令执行过程中卡住,可以:
481
+
482
+ 1. 按 `Ctrl+C` 中止
483
+ 2. 运行 `flu-cli cache clean` 清理缓存
484
+ 3. 重新执行命令
485
+
486
+ ### 模板拉取失败
487
+
488
+ ```bash
489
+ # 清理缓存后重试
490
+ flu-cli cache clean
491
+ flu-cli new my_app
492
+
493
+ # 或使用本地模板(开发环境)
494
+ flu-cli new my_app --no-cache
495
+ ```
496
+
497
+ ### 代码片段不生效
498
+
499
+ VSCode 扩展使用**动态代码片段**功能,会根据项目配置自动适配:
500
+
501
+ 1. 确保已安装 Flu CLI VSCode 扩展
502
+ 2. 打开 `.dart` 文件时扩展会自动激活
503
+ 3. 代码片段会根据 `.flu-cli.json` 配置动态显示
504
+ 4. 如果看不到代码片段,尝试重启 VSCode
505
+
506
+ ---
507
+
508
+ ## 更多帮助
509
+
510
+ - 查看具体命令帮助:`flu-cli <command> --help`
511
+ - 项目文档:[flu-cli 文档站](https://your-docs-url)
512
+ - 问题反馈:[GitHub Issues](https://github.com/your-repo/issues)