@agile-team/jh4j-cloud-cli 0.3.0 → 0.5.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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0
4
+
5
+ - 精简交互流程:单模板自动选择,标准能力直接采用模板默认值。
6
+ - 模块标识自动从项目名推导,不再询问 Registry、public 地址和五套环境配置。
7
+ - 默认不安装依赖,创建完成后提示开发者手动执行 `pnpm install`。
8
+ - 增加显式 `--install` 参数,仍可按需启用自动安装。
9
+ - 完成提示中列出项目配置、Registry 和环境文件的修改位置。
10
+ - 只展示当前可用的项目类型,并使用互不混淆的固定技术栈标签。
11
+ - 项目名自动转为小写短横线格式,标题、端口和 URL 在输入时就地校验。
12
+ - 模板下载阶段显示进度状态,单模板自动选择后明确显示模板名称。
13
+
14
+ ## 0.4.0
15
+
16
+ - 接入 `mobile.robot-h5` 移动端 H5 模板,支持 GitHub/Gitee 双 HTTPS 源。
17
+ - 移动端创建流程使用应用标题、本地 API 地址等移动端语义,隐藏 PC 专属问题。
18
+ - CLI 与直接 clone 共用移动端模板初始化契约。
19
+ - 移除 `--ref` 的硬编码 `main` 默认值,允许各模板使用 Catalog 中声明的分支或标签。
20
+ - 重写中文 README,使说明与当前命令和能力保持一致。
21
+
3
22
  ## 0.3.0
4
23
 
5
24
  - 增加“项目类型 → 具体模板 → 标准能力”的分层交互。
package/README.md CHANGED
@@ -1,69 +1,121 @@
1
- # jh4j-cloud-cli
1
+ # JH4J Cloud CLI
2
2
 
3
- JH4J Cloud 企业内部标准化项目脚手架。CLI 与模板独立发布、独立版本化,不依赖也不修改社区版 `robot-cli`。
3
+ JH4J Cloud 团队项目脚手架,用于从受控模板快速创建结构一致、配置完整、可追溯的工程。
4
4
 
5
- ## 运行环境
5
+ 当前版本:`@agile-team/jh4j-cloud-cli@0.5.0`。
6
6
 
7
- - Node.js 24(推荐)或 Node.js 22.12+
8
- - pnpm 11.8+
9
- - Git(使用 Git 模板源或初始化项目仓库时需要)
7
+ ## 核心能力
10
8
 
11
- ## 安装与开发
9
+ | 能力 | 说明 |
10
+ | --- | --- |
11
+ | 分类选择 | 按前端、后端、移动端组织模板;当前已接入 PC 与移动端模板 |
12
+ | 精简交互 | 只确认项目类型、标题、端口和本地服务地址;其余采用模板默认值 |
13
+ | 即时校验 | 项目名自动规范化,端口和 URL 错误在当前输入步骤直接提示 |
14
+ | 非交互创建 | 支持命令行参数和 JSON 配置文件,适用于 CI 与批量初始化 |
15
+ | 多源拉取 | 支持本地目录、Git、HTTP 压缩包和离线压缩包 |
16
+ | 源站容灾 | 内置模板按 GitHub → Gitee 顺序拉取,主源不可用时自动切换 |
17
+ | 模板缓存 | 按 `source + ref` 缓存远程模板,支持查看、清理和强制刷新 |
18
+ | 安全生成 | 在临时目录完成初始化与校验,成功后再原子写入目标目录 |
19
+ | 工程初始化 | 默认不安装依赖;可初始化 `main` 分支并创建首次提交 |
20
+ | 来源追踪 | 生成 `.jhlc/project.json`,记录模板版本、CLI 版本和创建参数 |
21
+
22
+ 生成链路:
23
+
24
+ ```text
25
+ jh4j create
26
+ → 读取 Catalog
27
+ → 选择项目类型与模板
28
+ → 解析可用模板源
29
+ → 拉取或读取缓存
30
+ → 校验 template.manifest.json
31
+ → 在 staging 目录执行模板初始化
32
+ → 生成项目并初始化 Git
33
+ → 开发者按需修改配置并手动安装依赖
34
+ ```
35
+
36
+ ## 环境要求
37
+
38
+ - Node.js `^22.12.0 || ^24.0.0`,推荐 Node.js 24
39
+ - pnpm `>=11.8.0`
40
+ - Git
41
+
42
+ 建议先检查本机环境:
12
43
 
13
44
  ```bash
14
- pnpm install
15
- pnpm check
16
- node bin/jh4j.js doctor
45
+ npx @agile-team/jh4j-cloud-cli doctor
17
46
  ```
18
47
 
19
- 发布到内部 npm 后:
48
+ ## 快速开始
49
+
50
+ 无需全局安装:
20
51
 
21
52
  ```bash
22
- npx @agile-team/jh4j-cloud-cli create my-app
53
+ npx @agile-team/jh4j-cloud-cli create jh4j-ui-orders
54
+ ```
55
+
56
+ 或者全局安装:
23
57
 
24
- # 或全局安装
58
+ ```bash
25
59
  pnpm add -g @agile-team/jh4j-cloud-cli
26
- jh4j create my-app
60
+ jh4j create jh4j-ui-orders
27
61
  ```
28
62
 
29
- ## 创建项目
63
+ 交互模式只确认必要信息,直接回车即可接受当前默认值:
30
64
 
31
- ```bash
32
- # 交互模式
33
- jh4j create my-app
65
+ ```text
66
+ 项目类型
67
+ 单个可用模板自动选中
68
+ → 系统/应用标题
69
+ → 开发端口
70
+ → 本地后端/API 地址
71
+ → 生成项目并初始化 Git
72
+ ```
34
73
 
35
- # 依次选择项目类型、具体模板和模板提供的标准能力
36
- # 当前后端、移动端会显示为“暂未提供”,加入 Catalog 后自动开放
74
+ 标准能力默认启用,Registry、模块标识和各套环境配置不再逐项询问。需要调整时,创建完成后直接修改项目中的 `project.config.json`、`.npmrc` 和 `.env*` 文件。
37
75
 
38
- # 非交互模式
39
- jh4j create my-app \
40
- --yes \
41
- --category frontend \
42
- --template web.jh4j-mf-remote \
43
- --module my-app \
44
- --title "My Application" \
45
- --port 8001
76
+ 项目名允许输入常见的人类可读形式,CLI 会自动转为适合目录和 `package.json` 的小写名称。例如 `JH4J 移动端 H5 模板` 会转换为 `jh4j-h5`;如果输入无法得到任何字母或数字,会在当前输入框中直接提示。
46
77
 
47
- # JSON 文件读取项目参数
48
- jh4j create my-app --yes --config ./project-input.json
78
+ 当前 Catalog 中可用模板:
49
79
 
50
- # 预览,不写入项目目录
51
- jh4j create my-app --yes --dry-run
80
+ | 类型 | 模板 ID | 模板 |
81
+ | --- | --- | --- |
82
+ | 前端 | `web.jh4j-mf-remote` | Vue 3 + Vite + Module Federation PC 业务子系统 |
83
+ | 后端 | — | 暂未接入 |
84
+ | 移动端 | `mobile.robot-h5` | Vue 3 + Vite 7 + Vant 4 企业级 H5 应用 |
52
85
 
53
- # 生成源码但不安装依赖、不初始化 Git
54
- jh4j create my-app --yes --skip-install --skip-git
86
+ ## 创建项目
87
+
88
+ ### 交互创建
55
89
 
56
- # 使用模板但不安装完整 Git/代码标准化包
57
- jh4j create my-app --yes --no-standards
90
+ ```bash
91
+ jh4j create jh4j-ui-orders
58
92
  ```
59
93
 
60
- PC 模板默认启用完整的 `@robot-admin/git-standards`。也可以通过 `--features git-standards` 或 JSON 参数中的 `features` 明确指定;能力选择会写入生成项目元数据。
94
+ ### 使用明确参数创建
95
+
96
+ ```bash
97
+ jh4j create jh4j-ui-orders \
98
+ --yes \
99
+ --category frontend \
100
+ --template web.jh4j-mf-remote \
101
+ --module orders \
102
+ --title "订单中心" \
103
+ --port 8123
104
+ ```
61
105
 
62
- 创建过程先在当前目录的隐藏 staging 目录中完成模板初始化。只有模板脚本和项目元数据校验成功后才原子替换目标目录;即使使用 `--force`,初始化失败时原目录也会保留。
106
+ 创建移动端项目:
63
107
 
64
- ### 创建参数文件
108
+ ```bash
109
+ jh4j create jh4j-mobile-orders \
110
+ --yes \
111
+ --category mobile \
112
+ --template mobile.robot-h5 \
113
+ --title "移动订单中心" \
114
+ --port 8888 \
115
+ --local-backend http://localhost:10010
116
+ ```
65
117
 
66
- `--config` 接受与模板 `project.config.json` 相同的部分字段,命令行参数优先级更高:
118
+ ### 使用 JSON 参数文件
67
119
 
68
120
  ```json
69
121
  {
@@ -81,84 +133,170 @@ PC 模板默认启用完整的 `@robot-admin/git-standards`。也可以通过 `-
81
133
  }
82
134
  ```
83
135
 
136
+ ```bash
137
+ jh4j create jh4j-ui-orders --yes --config ./project-input.json
138
+ ```
139
+
140
+ 命令行参数的优先级高于 JSON 文件中的同名配置。
141
+
142
+ ### 预览生成计划
143
+
144
+ ```bash
145
+ jh4j create jh4j-ui-orders --yes --dry-run
146
+ ```
147
+
148
+ `--dry-run` 会完成模板解析和参数校验,但不会创建项目目录。
149
+
150
+ ### 安装依赖与可选步骤
151
+
152
+ ```bash
153
+ # 默认只生成项目,依赖由开发者手动安装
154
+ jh4j create jh4j-ui-orders --yes
155
+
156
+ # 确实需要创建后自动安装时显式指定
157
+ jh4j create jh4j-ui-orders --yes --install
158
+
159
+ # 跳过 Git 初始化
160
+ jh4j create jh4j-ui-orders --yes --skip-git
161
+
162
+ # 不启用模板提供的完整 Git 与代码质量规范
163
+ jh4j create jh4j-ui-orders --yes --no-standards
164
+ ```
165
+
166
+ PC 与移动端模板默认启用 `git-standards` 能力。创建时不再重复确认;需要关闭时使用 `--no-standards`。
167
+
168
+ ### 常用参数
169
+
170
+ | 参数 | 说明 |
171
+ | --- | --- |
172
+ | `-c, --category <category>` | 项目类型:`frontend`、`backend`、`mobile` |
173
+ | `-t, --template <id>` | 指定模板 ID |
174
+ | `--features <ids>` | 启用的模板能力,多个 ID 使用逗号分隔 |
175
+ | `--no-standards` | 禁用模板提供的 Git 与代码质量规范 |
176
+ | `--source <path-or-url>` | 强制使用指定模板目录、Git 地址或压缩包 |
177
+ | `--ref <branch-or-tag>` | 覆盖 Catalog 为模板配置的默认分支或标签 |
178
+ | `--config <json-file>` | 从 JSON 文件读取创建参数 |
179
+ | `--dry-run` | 校验并展示生成计划,不写入项目目录 |
180
+ | `--install` | 创建完成后自动安装依赖;默认不安装 |
181
+ | `--skip-install` | 明确不安装依赖,兼容旧命令 |
182
+ | `--skip-git` | 跳过 Git 初始化 |
183
+ | `--force` | 替换已存在的同名目录 |
184
+ | `--no-cache` | 不读取已有远程模板缓存 |
185
+
186
+ 完整参数以命令输出为准:
187
+
188
+ ```bash
189
+ jh4j create --help
190
+ ```
191
+
192
+ ## 生成安全性
193
+
194
+ CLI 不会直接在目标目录中边下载边修改。创建过程先在当前目录生成隐藏的 staging 目录,并依次完成:
195
+
196
+ 1. 模板 Manifest 校验。
197
+ 2. 模板初始化脚本执行。
198
+ 3. 生成元数据校验。
199
+ 4. staging 目录原子提升为目标目录。
200
+ 5. Git 初始化,以及显式 `--install` 时的依赖安装。
201
+
202
+ 目标目录已存在时,默认拒绝覆盖。使用 `--force` 后,CLI 会先备份旧目录;模板初始化失败时,旧目录保持不变。默认不安装依赖,避免网络或 Registry 问题阻塞项目生成。
203
+
84
204
  ## 模板来源
85
205
 
86
206
  支持以下来源:
87
207
 
88
208
  - 本地模板目录
89
- - Git HTTP/SSH/file URL,可指定 branch 或 tag
90
- - 本地 `.tgz`、`.tar.gz`、`.tar`
209
+ - Git HTTP、HTTPS、SSH `file://` 地址
210
+ - 本地 `.tgz`、`.tar.gz`、`.tar` 文件
91
211
  - HTTP(S) 模板压缩包
92
212
 
93
- 来源优先级:
213
+ 来源解析顺序:
94
214
 
95
215
  ```text
96
216
  --source
97
217
  → 模板专属环境变量
98
218
  → 用户配置 templateSource
99
- → Catalog defaultSource + sources(按顺序自动降级)
219
+ → Catalog defaultSource + sources
100
220
  ```
101
221
 
102
- ```bash
103
- jh4j create my-app --source ../jh4j-ui-template
104
- jh4j create my-app --source https://git.example/jh4j-ui-template.git --ref v1.0.0
105
- jh4j create my-app --source ./jh4j-ui-template-1.0.0.tgz
106
- ```
222
+ 一旦通过 `--source`、环境变量或用户配置指定来源,该来源将作为强制来源,不再自动尝试 Catalog 中的备用源。
223
+
224
+ ### 内置模板源
107
225
 
108
- 内置 PC 模板在 CLI 开发期优先读取兄弟目录 `../jh4j-ui-template`;发布安装后依次尝试以下 HTTPS 源,主源不可用时自动降级:
226
+ CLI 源码开发时会优先读取工作区中的 PC、移动端模板,便于联调。
227
+
228
+ 从 npm 安装后按以下顺序尝试远程源:
109
229
 
110
230
  ```text
111
231
  https://github.com/ChenyCHENYU/jh4j-ui-template.git
112
232
  → https://gitee.com/ycyplus163/jh4j-ui-template.git
113
233
  ```
114
234
 
115
- 也可设置单一强制源:
235
+ 移动端模板按以下顺序尝试,并默认固定到 `v1.6.0`:
116
236
 
117
- ```powershell
118
- $env:JH4J_UI_TEMPLATE_SOURCE="https://git.example/jh4j-ui-template.git"
237
+ ```text
238
+ https://github.com/ChenyCHENYU/Robot_H5.git
239
+ → https://gitee.com/ycyplus163/robot_-h5.git
119
240
  ```
120
241
 
121
- ### 模板缓存
242
+ PC 模板当前默认读取 `main`。也可以通过 `--ref` 明确固定模板版本:
122
243
 
123
- 远程 Git 和压缩包模板按 `source + ref` 缓存在 `$JH4J_HOME/cache/templates`,默认有效期 60 分钟。
244
+ ```bash
245
+ jh4j create jh4j-ui-orders --ref <template-tag>
246
+ ```
247
+
248
+ 也可以临时指定其他来源:
249
+
250
+ ```bash
251
+ jh4j create jh4j-ui-orders \
252
+ --source https://git.example.com/templates/jh4j-ui-template.git \
253
+ --ref main
254
+ ```
255
+
256
+ ## 模板缓存
257
+
258
+ 远程 Git 和压缩包模板缓存在:
259
+
260
+ ```text
261
+ ~/.jh4j/cache/templates
262
+ ```
263
+
264
+ 默认缓存有效期为 60 分钟。缓存键由模板 `source + ref` 计算,不同镜像和不同分支互不覆盖。
124
265
 
125
266
  ```bash
126
267
  jh4j cache list
127
268
  jh4j cache list --json
128
269
  jh4j cache clear
129
- jh4j create my-app --no-cache
270
+ jh4j create jh4j-ui-orders --no-cache
130
271
  ```
131
272
 
132
273
  ## 用户配置
133
274
 
134
- 默认保存在 `~/.jh4j/config.json`;可以通过 `JH4J_HOME` 修改根目录。
275
+ 用户配置默认保存在 `~/.jh4j/config.json`。设置 `JH4J_HOME` 可以修改 CLI 数据根目录。
135
276
 
136
277
  ```bash
137
278
  jh4j config list
138
279
  jh4j config get autoInstall
139
- jh4j config set autoInstall false
140
- jh4j config set templateRef v1.0.0
280
+ jh4j config set autoInstall true
281
+ jh4j config set autoGit false
141
282
  jh4j config set cacheTtlMinutes 120
142
- jh4j config unset templateRef
283
+ jh4j config unset cacheTtlMinutes
143
284
  jh4j config reset
144
285
  ```
145
286
 
146
- 支持的配置项:
147
-
148
- | 配置 | 说明 |
287
+ | 配置项 | 说明 |
149
288
  | --- | --- |
150
289
  | `catalogFile` | 外部 Catalog JSON 文件 |
151
- | `templateSource` | 全局模板源覆盖 |
152
- | `templateRef` | 默认 Git branch/tag |
153
- | `npmRegistry` | npm registry;必须能提供企业定制的非 scope |
154
- | `jhlcRegistry` | `@jhlc` 私有 registry |
155
- | `autoInstall` | 创建后是否安装依赖 |
156
- | `autoGit` | 创建后是否初始化 Git |
157
- | `cacheTtlMinutes` | 模板缓存有效期,0 表示每次刷新 |
290
+ | `templateSource` | 全局模板源覆盖;设置后不再自动尝试 Catalog 备用源 |
291
+ | `npmRegistry` | npm Registry,必须能提供项目使用的企业定制包 |
292
+ | `jhlcRegistry` | `@jhlc` 私有 Registry |
293
+ | `autoInstall` | 创建后是否自动安装依赖,默认 `false`;通常保持默认即可 |
294
+ | `autoGit` | 创建后是否初始化 Git 仓库 |
295
+ | `cacheTtlMinutes` | 模板缓存有效期;`0` 表示每次刷新 |
158
296
 
159
297
  ## 外部 Catalog
160
298
 
161
- 通过 `JH4J_CATALOG_FILE` 或用户配置 `catalogFile` 加载。相同 ID 会覆盖内置定义,其他模板会追加:
299
+ 通过 `JH4J_CATALOG_FILE` 或用户配置中的 `catalogFile` 加载外部 Catalog。相同模板 ID 会覆盖内置定义,其他 ID 会追加到模板列表。
162
300
 
163
301
  ```json
164
302
  {
@@ -169,9 +307,9 @@ jh4j config reset
169
307
  "name": "JH4J PC 微前端业务模板",
170
308
  "description": "企业 PC 业务子系统",
171
309
  "category": "frontend",
172
- "defaultSource": "https://git.example/jh4j-ui-template.git",
310
+ "defaultSource": "https://git.example.com/templates/jh4j-ui-template.git",
173
311
  "sources": [
174
- "https://git-backup.example/jh4j-ui-template.git"
312
+ "https://git-backup.example.com/templates/jh4j-ui-template.git"
175
313
  ],
176
314
  "sourceEnvironment": "JH4J_UI_TEMPLATE_SOURCE",
177
315
  "defaultRef": "main",
@@ -182,23 +320,107 @@ jh4j config reset
182
320
  }
183
321
  ```
184
322
 
185
- ## 命令
323
+ Catalog JSON Schema 位于 [`catalog.schema.json`](./catalog.schema.json)。
324
+
325
+ ## 模板接入规范
326
+
327
+ 每个模板仓库至少需要提供:
328
+
329
+ ```text
330
+ template.manifest.json # 模板 ID、版本、运行时、默认值和可选能力
331
+ project.config.json # 项目默认配置
332
+ scripts/setup-project.mjs # CLI 与直接 clone 共用的初始化入口
333
+ scripts/validate-template.mjs
334
+ ```
335
+
336
+ 模板初始化完成后必须生成 Manifest 声明的元数据文件,当前 PC 与移动端模板都使用 `.jhlc/project.json`。CLI 只有在元数据存在且模板初始化成功后才会提升 staging 目录。
337
+
338
+ 校验本地模板:
339
+
340
+ ```bash
341
+ jh4j template validate ../jh4j-ui-template
342
+ jh4j template validate ../../Robot_H5
343
+ ```
344
+
345
+ 模板列表和完整定义可通过 JSON 查看:
346
+
347
+ ```bash
348
+ jh4j list --json
349
+ ```
350
+
351
+ ## 项目信息
352
+
353
+ 在生成项目中查看模板与创建信息:
354
+
355
+ ```bash
356
+ jh4j info .
357
+ jh4j info . --json
358
+ ```
359
+
360
+ 项目元数据位于 `.jhlc/project.json`,用于确认项目由哪个模板版本和 CLI 版本创建。
361
+
362
+ ## 命令总览
186
363
 
187
364
  ```text
188
- jh4j list [--json]
189
- jh4j create [name]
190
- jh4j doctor [--json]
191
- jh4j info [path] [--json]
192
- jh4j template validate [path]
193
- jh4j config list|get|set|unset|reset
194
- jh4j cache list|clear
365
+ jh4j create [name] 创建项目
366
+ jh4j list [--json] 查看模板 Catalog
367
+ jh4j doctor [--json] 检查 Node、pnpm、Git 与模板环境
368
+ jh4j info [path] [--json] 查看生成项目元数据
369
+ jh4j template validate [path] 校验模板契约
370
+ jh4j config list|get|set|unset|reset 管理用户配置
371
+ jh4j cache list|clear 管理模板缓存
372
+ ```
373
+
374
+ ## 本地开发
375
+
376
+ ```bash
377
+ git clone https://github.com/ChenyCHENYU/jh4j-cloud-cli.git
378
+ cd jh4j-cloud-cli
379
+ pnpm install
380
+ pnpm check
381
+ node bin/jh4j.js doctor
382
+ ```
383
+
384
+ `pnpm check` 会依次执行 TypeScript 类型检查、自动化测试和生产构建。
385
+
386
+ 发布包检查:
387
+
388
+ ```bash
389
+ npm pack --dry-run
390
+ ```
391
+
392
+ ## 常见问题
393
+
394
+ ### 模板拉取失败
395
+
396
+ ```bash
397
+ jh4j doctor
398
+ jh4j create jh4j-ui-orders --no-cache
399
+ ```
400
+
401
+ 先检查 GitHub、Gitee 或自定义模板源是否可访问,再检查本地 Git 代理和凭据配置。
402
+
403
+ ### 手动安装依赖
404
+
405
+ 项目生成完成后,确认 `.npmrc` 和内部 Registry 网络,再手动执行:
406
+
407
+ ```bash
408
+ pnpm install
195
409
  ```
196
410
 
197
- ## 后续边界
411
+ PC 模板包含企业定制的非 scope 依赖,默认 npm Registry 必须能够提供这些包。
412
+
413
+ ### 只生成文件,不初始化 Git
414
+
415
+ ```bash
416
+ jh4j create jh4j-ui-orders --yes --skip-git
417
+ ```
198
418
 
199
- 当前版本专注“可靠创建标准项目”。以下能力将在模板发布流程稳定后继续实现:
419
+ ### 强制使用指定模板源
200
420
 
201
- - 项目 `upgrade` 与模板 migrations
202
- - 更多模板专属 Recipes 与标准能力追加
203
- - GitLab 自动建仓和权限初始化
204
- - 后端与移动端模板 Catalog
421
+ ```bash
422
+ jh4j create jh4j-ui-orders \
423
+ --source ./jh4j-ui-template \
424
+ --ref main \
425
+ --no-cache
426
+ ```