flu-cli 0.0.2 → 0.0.5
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 +259 -63
- package/index.js +68 -19
- package/lib/createProject.js +97 -64
- package/lib/flutterProjectCreator.js +63 -49
- package/lib/libCopier.js +183 -119
- package/lib/userInteraction.js +129 -61
- package/lib/utils.js +92 -44
- package/package.json +5 -2
- package/publish.sh +29 -0
- package/lib/desktopPath.js +0 -85
package/README.md
CHANGED
|
@@ -1,107 +1,303 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Flu CLI 工具
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **flu-cli** 是一个强大的 Flutter 项目脚手架工具,可以帮助您快速创建和配置项目。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
[](https://www.npmjs.com/package/flu-cli)
|
|
6
|
+
[](https://gitee.com/tengteng_fan/flutter-cli/blob/main/LICENSE)
|
|
7
|
+
[](https://www.npmjs.com/package/flu-cli)
|
|
6
8
|
|
|
7
|
-
|
|
8
|
-
- 支持创建应用(app)和模块(module)两种项目类型
|
|
9
|
-
- 提供基础版和增强版两种项目模板
|
|
10
|
-
- 自动配置项目包名和显示名称
|
|
11
|
-
- 支持从 Git 仓库获取最新模板代码
|
|
12
|
-
- 自动打开 IDE(支持 VS Code、Android Studio 等)
|
|
13
|
-
- 跨平台支持(Windows、macOS、Linux)
|
|
9
|
+
## 📋 目录
|
|
14
10
|
|
|
15
|
-
|
|
11
|
+
- [🚀 快速开始](#-快速开始)
|
|
12
|
+
- [📦 安装](#-安装)
|
|
13
|
+
- [🛠️ 使用方法](#️-使用方法)
|
|
14
|
+
- [交互式向导](#交互式向导)
|
|
15
|
+
- [项目模版对比](#项目模版对比)
|
|
16
|
+
- [命令行创建](#命令行创建)
|
|
17
|
+
- [📁 项目结构](#-项目结构)
|
|
18
|
+
- [🏃 运行与调试](#-运行与调试)
|
|
19
|
+
- [📚 进阶指南](#-进阶指南)
|
|
20
|
+
- [🔧 兼容性说明](#-兼容性说明)
|
|
16
21
|
|
|
17
|
-
|
|
22
|
+
## 🚀 快速开始
|
|
18
23
|
|
|
19
24
|
```bash
|
|
25
|
+
# 全局安装
|
|
20
26
|
npm install -g flu-cli
|
|
21
|
-
```
|
|
22
27
|
|
|
23
|
-
|
|
28
|
+
# 创建项目
|
|
29
|
+
flu-cli
|
|
24
30
|
|
|
25
|
-
|
|
26
|
-
|
|
31
|
+
# 或使用 npx(无需安装)
|
|
32
|
+
npx flu-cli
|
|
27
33
|
```
|
|
28
34
|
|
|
29
|
-
##
|
|
35
|
+
## 📦 安装
|
|
36
|
+
|
|
37
|
+
您可以通过以下方式安装 flu-cli:
|
|
38
|
+
|
|
39
|
+
| 安装方式 | NPM | PNPM | Yarn |
|
|
40
|
+
| -------------- | ------------------------ | --------------------- | ------------------------- |
|
|
41
|
+
| **全局安装** | `npm install -g flu-cli` | `pnpm add -g flu-cli` | `yarn global add flu-cli` |
|
|
42
|
+
| **项目内安装** | `npm install flu-cli` | `pnpm add flu-cli` | `yarn add flu-cli` |
|
|
43
|
+
|
|
44
|
+
> 💡 **推荐使用全局安装**,这样可以在任何地方使用 `flu-cli` 命令。
|
|
45
|
+
|
|
46
|
+
## 🛠️ 使用方法
|
|
47
|
+
|
|
48
|
+
### 交互式向导
|
|
30
49
|
|
|
31
|
-
|
|
50
|
+
flu-cli 附带一个命令行设置向导,它将帮助您构建一个基本项目。安装后,您可以通过运行以下命令启动向导:
|
|
32
51
|
|
|
33
52
|
```bash
|
|
34
53
|
# 如果全局安装
|
|
35
|
-
|
|
54
|
+
flu-cli
|
|
36
55
|
|
|
37
56
|
# 或者使用 npx
|
|
38
57
|
npx flu-cli
|
|
39
58
|
```
|
|
40
59
|
|
|
41
|
-
|
|
60
|
+
运行向导后,根据提示输入项目信息,如项目名称、包名、项目类型、模板类型、状态管理方案等。向导会自动生成项目结构并配置相关文件。
|
|
61
|
+
|
|
62
|
+
<details>
|
|
63
|
+
<summary>📋 向导示例(点击展开)</summary>
|
|
42
64
|
|
|
43
65
|
```bash
|
|
44
|
-
|
|
66
|
+
欢迎使用 火之夜工作室 Flutter 项目创建工具
|
|
67
|
+
|
|
68
|
+
? 请选择项目类型: (Use arrow keys)
|
|
69
|
+
❯ 应用 (app)
|
|
70
|
+
模块 (module)
|
|
71
|
+
原生插件 (plugin)
|
|
72
|
+
插件 (package)
|
|
73
|
+
|
|
74
|
+
? 请选择项目模版: (Use arrow keys)
|
|
75
|
+
only (main.dart)
|
|
76
|
+
min (项目结构、路由管理、主题管理、状态管理、工具集)
|
|
77
|
+
normal (项目结构、路由管理、主题管理、状态管理、工具集、UI 组件库)
|
|
78
|
+
❯ pro (项目结构、路由管理、主题管理、状态管理、工具集、UI 组件库、网络请求、数据缓存、示例模块)
|
|
79
|
+
|
|
80
|
+
? 请选择状态管理: (Use arrow keys)
|
|
81
|
+
❯ state (State)
|
|
82
|
+
get (GetX)
|
|
83
|
+
|
|
84
|
+
? 请输入新项目名称(小写字母、数字和下划线): (hzy_example_project)
|
|
85
|
+
? 请输入 Flutter SDK 路径(留空使用系统默认):
|
|
86
|
+
? 请输入包名: (com.example.hzy_example_project)
|
|
87
|
+
? 请输入项目存放路径: (默认: 当前目录)
|
|
88
|
+
|
|
89
|
+
⚠️ 警告: 目标目录 hzy_example_project 已存在!
|
|
90
|
+
? 是否覆盖? (y/N)
|
|
91
|
+
|
|
92
|
+
? 请选择要打开项目的 IDE: (Use arrow keys)
|
|
93
|
+
❯ Visual Studio Code
|
|
94
|
+
Android Studio
|
|
95
|
+
打开文件夹
|
|
96
|
+
不打开
|
|
45
97
|
```
|
|
46
98
|
|
|
47
|
-
|
|
99
|
+
</details>
|
|
48
100
|
|
|
49
|
-
|
|
50
|
-
2. 选择模板类型(基础版或增强版)
|
|
51
|
-
3. 输入项目名称、包名和显示名称
|
|
52
|
-
4. 选择项目存放路径
|
|
53
|
-
5. 选择要使用的 IDE
|
|
101
|
+
### 项目模版对比
|
|
54
102
|
|
|
55
|
-
|
|
103
|
+
| 功能特性 | 🔹 only | 🔸 min | 🔶 normal | 🔥 pro |
|
|
104
|
+
| :----------------------- | :-----: | :----: | :-------: | :----: |
|
|
105
|
+
| **基础入口 (main.dart)** | ✅ | ✅ | ✅ | ✅ |
|
|
106
|
+
| **标准项目结构** | ❌ | ✅ | ✅ | ✅ |
|
|
107
|
+
| **路由管理系统** | ❌ | ✅ | ✅ | ✅ |
|
|
108
|
+
| **主题管理系统** | ❌ | ✅ | ✅ | ✅ |
|
|
109
|
+
| **状态管理方案** | ❌ | ✅ | ✅ | ✅ |
|
|
110
|
+
| **开发工具集** | ❌ | ✅ | ✅ | ✅ |
|
|
111
|
+
| **UI 组件库** | ❌ | ❌ | ✅ | ✅ |
|
|
112
|
+
| **网络请求框架** | ❌ | ❌ | ❌ | ✅ |
|
|
113
|
+
| **数据持久化** | ❌ | ❌ | ❌ | ✅ |
|
|
56
114
|
|
|
57
|
-
|
|
58
|
-
- chalk: 终端彩色输出
|
|
59
|
-
- commander: 命令行参数解析
|
|
60
|
-
- ora: 终端加载动画
|
|
61
|
-
- cli-progress: 进度条显示
|
|
62
|
-
- fs-extra: 文件系统操作增强
|
|
115
|
+
#### 模版说明
|
|
63
116
|
|
|
64
|
-
|
|
117
|
+
- 🔹 **only**:仅保留最小运行单元(适合验证核心功能)
|
|
118
|
+
- 🔸 **min**:三大基石(路由/主题/状态管理)
|
|
119
|
+
- 🔶 **normal**:增加 UI 组件库(提升开发效率)
|
|
120
|
+
- 🔥 **pro**:完整解决方案(含网络层+数据持久化)
|
|
65
121
|
|
|
66
|
-
|
|
122
|
+
> 📖 想了解更多项目模版区别,请查看 [项目模版详细说明](http://huozhiye.cn/flu-cli/guide/project-template.html)。
|
|
67
123
|
|
|
124
|
+
### 命令行创建
|
|
125
|
+
|
|
126
|
+
可以直接通过命令行参数指定所有配置,无需交互式输入:
|
|
127
|
+
|
|
128
|
+
#### 基本语法
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
flu-cli create [options]
|
|
68
132
|
```
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
├── flutterProjectCreator.js # Flutter项目创建
|
|
77
|
-
├── libCopier.js # 项目模板复制
|
|
78
|
-
├── utils.js # 工具函数
|
|
79
|
-
└── desktopPath.js # 桌面路径获取
|
|
133
|
+
|
|
134
|
+
#### 使用示例
|
|
135
|
+
|
|
136
|
+
##### 🔥 Pro 模版(推荐)
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
flu-cli create -t app -m pro -s GetX -n my_flutter_app -p com.example.myapp -d ~/projects -i vscode
|
|
80
140
|
```
|
|
81
141
|
|
|
82
|
-
|
|
142
|
+
##### 🔶 Normal 模版
|
|
83
143
|
|
|
84
144
|
```bash
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
cd flutter-cli
|
|
145
|
+
flu-cli create -t module -m normal -s state -n my_flutter_module -p com.example.mymodule -d ~/projects -i android_studio
|
|
146
|
+
```
|
|
88
147
|
|
|
89
|
-
|
|
90
|
-
npm install
|
|
148
|
+
##### 🔸 Min 模版
|
|
91
149
|
|
|
92
|
-
|
|
93
|
-
|
|
150
|
+
```bash
|
|
151
|
+
flu-cli create -t app -m min -n quick_start -p com.example.quick -d ~/projects
|
|
152
|
+
```
|
|
94
153
|
|
|
95
|
-
|
|
96
|
-
|
|
154
|
+
##### 🔹 Only 模版
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
flu-cli create -t app -m only -n quick_start -p com.example.quick -d ~/projects
|
|
97
158
|
```
|
|
98
159
|
|
|
99
|
-
|
|
160
|
+
##### 默认配置(使用向导)
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
flu-cli create
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
#### 参数说明
|
|
167
|
+
|
|
168
|
+
| 参数 | 说明 | 可选值 | 必选 | 示例 |
|
|
169
|
+
| :-------------------- | :--------------- | :-------------------------------------------------- | :--- | :--------------------- |
|
|
170
|
+
| `-t, --project-type` | 项目类型 | `app`, `module`, `package`, `plugin` | ✅ | `-t app` |
|
|
171
|
+
| `-m, --template-type` | 模板类型 | `only`, `min`, `normal`, `pro` | ✅ | `-m pro` |
|
|
172
|
+
| `-s, --state-manager` | 状态管理方案 | `state`, `GetX`, `Riverpod` | ❌ | `-s GetX` |
|
|
173
|
+
| `-n, --project-name` | 项目名称 | 小写字母、数字和下划线组合 | ✅ | `-n my_app` |
|
|
174
|
+
| `-p, --package-name` | 包名 | 类似 Java 包名格式 | ✅ | `-p com.example.myapp` |
|
|
175
|
+
| `-d, --parent-dir` | 存放目录 | 绝对路径或相对路径 | ❌ | `-d ~/projects` |
|
|
176
|
+
| `-i, --ide` | IDE 选择 | `vscode`, `android_studio`, `open_folder`, `manual` | ❌ | `-i vscode` |
|
|
177
|
+
| `-f, --flutter-sdk` | Flutter SDK 路径 | 默认为系统环境变量中的 flutter | ❌ | `-f /path/to/flutter` |
|
|
178
|
+
| `-h, --help` | 显示帮助信息 | - | ❌ | `--help` |
|
|
179
|
+
|
|
180
|
+
> 📚 有关更多命令行用法的文档,请参阅 [CLI 参考文档](http://huozhiye.cn/flu-cli/eg/cli-des.html)。
|
|
181
|
+
|
|
182
|
+
## 📁 项目结构
|
|
183
|
+
|
|
184
|
+
以下是基于 **GetX** 的完整商业项目结构,清晰的项目结构有助于团队协作和代码维护。
|
|
185
|
+
|
|
186
|
+
```
|
|
187
|
+
📦 your_project_name/
|
|
188
|
+
├── 📁 .vscode/ # VS Code 配置文件
|
|
189
|
+
│ ├── 📄 extensions.json # 插件推荐
|
|
190
|
+
│ ├── 📄 launch.json # 调试配置
|
|
191
|
+
│ ├── 📄 settings.json # 编辑器设置
|
|
192
|
+
│ └── 📄 dart.code-snippets # 代码片段
|
|
193
|
+
├── 📁 assets/ # 静态资源文件
|
|
194
|
+
│ ├── 📁 fonts/ # 字体文件
|
|
195
|
+
│ ├── 📁 images/ # 图片资源
|
|
196
|
+
│ └── 📁 json/ # 本地数据
|
|
197
|
+
├── 📁 lib/ # 项目核心代码
|
|
198
|
+
│ ├── 📁 common/ # 公共组件和工具
|
|
199
|
+
│ ├── 📁 config/ # 应用配置
|
|
200
|
+
│ ├── 📁 eg_module/ # 示例模块
|
|
201
|
+
│ ├── 📁 init/ # 初始化逻辑
|
|
202
|
+
│ ├── 📄 main.dart # 应用入口文件
|
|
203
|
+
│ ├── 📁 models/ # 数据模型
|
|
204
|
+
│ ├── 📁 network/ # 网络请求
|
|
205
|
+
│ ├── 📁 pages/ # 页面文件
|
|
206
|
+
│ ├── 📁 tools/ # 工具类
|
|
207
|
+
│ ├── 📁 vm/ # 视图模型
|
|
208
|
+
│ └── 📁 widgets/ # UI 组件
|
|
209
|
+
├── 📄 pubspec.yaml # 项目配置文件
|
|
210
|
+
├── 📄 analysis_options.yaml # 代码分析配置
|
|
211
|
+
└── 📄 README.md # 项目说明文档
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 📋 目录说明
|
|
215
|
+
|
|
216
|
+
| 目录/文件 | 说明 | 用途 |
|
|
217
|
+
| ----------------- | ------------ | ---------------------------------- |
|
|
218
|
+
| 📁 `.vscode/` | VS Code 配置 | 包含编辑器配置、调试设置和代码片段 |
|
|
219
|
+
| 📁 `assets/` | 静态资源 | 存放图片、字体、本地数据等资源文件 |
|
|
220
|
+
| 📁 `lib/common/` | 公共模块 | 公共组件、工具类、常量定义 |
|
|
221
|
+
| 📁 `lib/config/` | 应用配置 | 环境配置、主题配置、路由配置 |
|
|
222
|
+
| 📁 `lib/network/` | 网络层 | HTTP 请求、API 接口、数据处理 |
|
|
223
|
+
| 📁 `lib/pages/` | 页面 | 应用的各个页面和子页面 |
|
|
224
|
+
| 📁 `lib/widgets/` | UI 组件 | 可复用的自定义 Widget 组件 |
|
|
225
|
+
| 📁 `lib/models/` | 数据模型 | 实体类、数据传输对象 |
|
|
226
|
+
| 📁 `lib/vm/` | 视图模型 | 状态管理、业务逻辑处理 |
|
|
227
|
+
|
|
228
|
+
## 🏃 运行与调试
|
|
229
|
+
|
|
230
|
+
### 基本运行步骤
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
# 1. 进入项目目录
|
|
234
|
+
cd /your_project_path/your_project_name
|
|
235
|
+
|
|
236
|
+
# 2. 获取依赖包
|
|
237
|
+
flutter pub get
|
|
238
|
+
|
|
239
|
+
# 3. 运行项目(开发模式)
|
|
240
|
+
flutter run
|
|
241
|
+
|
|
242
|
+
# 4. 构建发布版本
|
|
243
|
+
flutter build apk # Android
|
|
244
|
+
flutter build ios # iOS
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 🛠️ 开发工具推荐
|
|
248
|
+
|
|
249
|
+
| 工具 | 用途 | 推荐指数 |
|
|
250
|
+
| ------------------------ | -------------- | ---------- |
|
|
251
|
+
| 🔧 **VS Code** | 轻量级编辑器 | ⭐⭐⭐⭐⭐ |
|
|
252
|
+
| 🔧 **Android Studio** | 功能完整的 IDE | ⭐⭐⭐⭐ |
|
|
253
|
+
| 🔧 **Flutter Inspector** | UI 调试工具 | ⭐⭐⭐⭐⭐ |
|
|
254
|
+
| 🔧 **Dart DevTools** | 性能分析工具 | ⭐⭐⭐⭐ |
|
|
255
|
+
|
|
256
|
+
## 📚 进阶指南
|
|
257
|
+
|
|
258
|
+
🎉 恭喜您完成了 `flu-cli` 的基础配置!
|
|
259
|
+
|
|
260
|
+
### 🚀 推荐后续操作
|
|
261
|
+
|
|
262
|
+
- 📖 **深入学习**:查看 [高级特性文档](http://huozhiye.cn/flu-cli/tutorial/base-normal-ui.html)
|
|
263
|
+
- 🤝 **项目模版**:访问 [仓库](https://gitee.com/tengteng_fan/hzy_basic_project)
|
|
264
|
+
- 📚 **官方文档**:[flu-cli 完整文档](http://huozhiye.cn/flu-cli/)
|
|
265
|
+
- 💬 **社区支持**:加入开发者交流群
|
|
266
|
+
|
|
267
|
+
### 📖 相关资源
|
|
268
|
+
|
|
269
|
+
- [Flutter 官方文档](https://flutter.dev/docs)
|
|
270
|
+
- [GetX 状态管理](https://github.com/jonataslaw/getx)
|
|
271
|
+
- [Dart 语言指南](https://dart.dev/guides)
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## 🔧 兼容性说明
|
|
276
|
+
|
|
277
|
+
### 系统要求
|
|
278
|
+
|
|
279
|
+
| 环境 | 最低版本 | 推荐版本 | 状态 |
|
|
280
|
+
| --------------- | ------------- | ------------- | ------- |
|
|
281
|
+
| 🐦 **Flutter** | 3.0.0+ | 3.16.0+ | ✅ 支持 |
|
|
282
|
+
| 🟢 **Node.js** | 14.0.0+ | 18.0.0+ | ✅ 支持 |
|
|
283
|
+
| 🖥️ **操作系统** | - | - | - |
|
|
284
|
+
| └─ Windows | 10+ | 11 | ✅ 支持 |
|
|
285
|
+
| └─ macOS | 10.14+ | 13.0+ | ✅ 支持 |
|
|
286
|
+
| └─ Linux | Ubuntu 18.04+ | Ubuntu 22.04+ | ✅ 支持 |
|
|
287
|
+
|
|
288
|
+
### 📱 目标平台
|
|
289
|
+
|
|
290
|
+
- ✅ **Android** 5.0+ (API 21+)
|
|
291
|
+
- ✅ **iOS** 11.0+
|
|
292
|
+
- ✅ **Web** (Chrome, Safari, Firefox)
|
|
293
|
+
- ✅ **Desktop** (Windows, macOS, Linux)
|
|
294
|
+
|
|
295
|
+
---
|
|
100
296
|
|
|
101
|
-
|
|
102
|
-
- 使用前可运行 `flutter doctor` 检查 Flutter 安装状态
|
|
103
|
-
- 项目创建过程中需要网络连接以从 Git 仓库获取模板
|
|
297
|
+
<div align="center">
|
|
104
298
|
|
|
105
|
-
|
|
299
|
+
**🎉 祝您使用 `flu-cli` 开发愉快!**
|
|
300
|
+
[](https://gitee.com/tengteng_fan/flutter-cli)
|
|
301
|
+
[](https://gitee.com/tengteng_fan/flutter-cli)
|
|
106
302
|
|
|
107
|
-
|
|
303
|
+
</div>
|
package/index.js
CHANGED
|
@@ -6,35 +6,64 @@
|
|
|
6
6
|
* 主入口文件,处理命令行参数并调用相应功能
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
|
|
10
|
+
import { program } from 'commander'
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { createProject } from './lib/createProject.js';
|
|
13
|
+
import { readFileSync } from 'fs';
|
|
14
|
+
import { fileURLToPath } from 'url';
|
|
15
|
+
import { dirname, join } from 'path';
|
|
16
|
+
|
|
17
|
+
// 获取package.json内容
|
|
18
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
|
+
const packageJson = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf8'));
|
|
13
20
|
|
|
14
21
|
// 设置版本号和描述
|
|
15
22
|
program
|
|
16
23
|
.version(packageJson.version)
|
|
17
24
|
.description(chalk.cyan('火之夜工作室 Flutter 项目创建工具'));
|
|
18
25
|
|
|
26
|
+
//
|
|
27
|
+
|
|
19
28
|
// 创建项目命令
|
|
20
29
|
program
|
|
21
30
|
.command('create')
|
|
22
|
-
.description('
|
|
23
|
-
.option('-t, --project-type <type>', '项目类型: app
|
|
24
|
-
.option('-m, --template-type <type>', '模板类型:
|
|
25
|
-
.option('-
|
|
26
|
-
.option('-n, --project-name <name>', '项目名称
|
|
27
|
-
.option('-p, --package-name <name>', '包名
|
|
28
|
-
.option('-
|
|
29
|
-
.option('-i, --ide <type>', '使用的IDE: vscode, android_studio,
|
|
31
|
+
.description('创建新的Flutter项目')
|
|
32
|
+
.option('-t, --project-type <type>', '项目类型: app, module, package, plugin', 'app')
|
|
33
|
+
.option('-m, --template-type <type>', '模板类型: only, min, normal, pro', 'normal')
|
|
34
|
+
.option('-s, --state-manager <name>', '状态管理: state, GetX, Provider, MobX, Bloc, Riverpod', 'GetX')
|
|
35
|
+
.option('-n, --project-name <name>', '项目名称')
|
|
36
|
+
.option('-p, --package-name <name>', '包名(com.example.app)')
|
|
37
|
+
.option('-d, --parent-dir <path>', '项目存放目录')
|
|
38
|
+
.option('-i, --ide <type>', '使用的IDE: vscode, android_studio, open_folder , manual', 'vscode')
|
|
30
39
|
.option('-f, --flutter-sdk <path>', '自定义Flutter SDK路径')
|
|
40
|
+
.option('-h, --help', '显示创建命令帮助信息')
|
|
31
41
|
.action((options) => {
|
|
32
|
-
|
|
42
|
+
if (options.help) {
|
|
43
|
+
console.log(chalk.bold.greenBright('flu-cli create - 创建新的Flutter项目'));
|
|
44
|
+
console.log('用法: flu-cli create [选项]');
|
|
45
|
+
console.log('选项:');
|
|
46
|
+
console.log(' -t, --project-type <type> 项目类型 (app, module, package, plugin) [默认: app]');
|
|
47
|
+
console.log(' -m, --template-type <type> 模板类型 (only, min, normal, pro) [默认: pro]');
|
|
48
|
+
console.log(' -s, --state-manager <name> 状态管理方案 (state, GetX,) [默认: GetX]');
|
|
49
|
+
console.log(' -n, --project-name <name> 项目名称 [默认: hzy_example_${项目类型}]');
|
|
50
|
+
console.log(' -p, --package-name <name> 包名 [默认: com.example.${项目类型}]');
|
|
51
|
+
console.log(' -d, --parent-dir <path> 项目存放目录 [默认: 当前目录]');
|
|
52
|
+
console.log(' -i, --ide <choice> IDE选择 (vscode, android_studio, open_folder, manual) [默认: vscode]');
|
|
53
|
+
console.log(' -f, --flutter-sdk <path> 自定义Flutter SDK路径 [默认: 系统环境变量中的flutter]');
|
|
54
|
+
console.log(' -h, --help 显示本帮助信息');
|
|
55
|
+
process.exit(0);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
console.log(chalk.bold.greenBright('欢迎使用 火之夜工作室 Flutter 项目创建工具'));
|
|
33
59
|
|
|
34
60
|
// 检查是否提供了命令行参数
|
|
35
|
-
const hasCommandLineArgs = options.projectName ||
|
|
36
|
-
options.
|
|
37
|
-
options.
|
|
61
|
+
const hasCommandLineArgs = options.projectName ||
|
|
62
|
+
options.packageName ||
|
|
63
|
+
options.projectType !== 'app' ||
|
|
64
|
+
options.templateType !== 'normal' ||
|
|
65
|
+
options.stateManager !== 'GetX' ||
|
|
66
|
+
options.parentDir || options.ide !== 'vscode' || options.flutterSdk;
|
|
38
67
|
|
|
39
68
|
// 如果提供了命令行参数,则直接使用这些参数创建项目
|
|
40
69
|
// 否则使用交互式方式获取参数
|
|
@@ -42,14 +71,34 @@ program
|
|
|
42
71
|
useCommandLineArgs: hasCommandLineArgs,
|
|
43
72
|
projectType: options.projectType,
|
|
44
73
|
templateType: options.templateType,
|
|
45
|
-
|
|
74
|
+
stateManager: options.stateManager,
|
|
46
75
|
projectName: options.projectName,
|
|
47
76
|
packageName: options.packageName,
|
|
48
|
-
parentDir: options.
|
|
49
|
-
ideChoice: options.ide
|
|
77
|
+
parentDir: options.parentDir,
|
|
78
|
+
ideChoice: options.ide,
|
|
79
|
+
flutterSdkPath: options.flutterSdk,
|
|
50
80
|
});
|
|
51
81
|
});
|
|
52
82
|
|
|
83
|
+
// 全局帮助处理
|
|
84
|
+
if (process.argv.includes('-h') || process.argv.includes('--help')) {
|
|
85
|
+
if (process.argv.length <= 3) {
|
|
86
|
+
console.log('flu-cli - 火之夜工作室Flutter项目创建工具');
|
|
87
|
+
console.log('版本: ' + packageJson.version);
|
|
88
|
+
console.log('用法: flu-cli [命令] [选项]\n');
|
|
89
|
+
console.log('命令:');
|
|
90
|
+
console.log(' create 创建新的Flutter项目\n');
|
|
91
|
+
console.log('全局选项:');
|
|
92
|
+
console.log(' -V, --version 显示版本号');
|
|
93
|
+
console.log(' -h, --help 显示全局帮助信息\n');
|
|
94
|
+
console.log('使用 "flu-cli [命令] --help" 查看特定命令的详细帮助');
|
|
95
|
+
process.exit(0);
|
|
96
|
+
}
|
|
97
|
+
program.parse(process.argv);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
53
102
|
// 如果没有提供命令,默认执行创建项目
|
|
54
103
|
if (process.argv.length === 2) {
|
|
55
104
|
console.log(chalk.bold.greenBright('欢迎使用 火之夜工作室 Flutter 项目创建工具\n'));
|