pangu-vis-cli 1.1.0 → 1.2.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.
- package/README.md +56 -256
- package/dist/index.js +53 -164
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
1
|
# pangu-vis-cli
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 盘古可视化平台的图表包脚手架与开发辅助工具
|
|
4
4
|
|
|
5
5
|
## 简介
|
|
6
6
|
|
|
7
|
-
`pangu-vis-cli`
|
|
7
|
+
`pangu-vis-cli` 是一个专为盘古可视化平台设计的图表包脚手架与开发辅助工具,覆盖图表包创建、本地开发调试与打包构建。通过简洁的命令,开发者可以快速创建标准化的图表项目,进行本地开发调试,并一键打包为 tar.gz 发布产物。1.1.0 起本工具聚焦脚手架与开发辅助,tar.gz 发布产物面向盘古可视化平台使用。
|
|
8
8
|
|
|
9
9
|
**核心价值**:
|
|
10
10
|
|
|
11
11
|
- 🚀 **快速初始化** - 一键创建标准化图表项目模板
|
|
12
|
-
- 🔧 **开发友好** -
|
|
13
|
-
- 📦 **智能打包** -
|
|
14
|
-
- 📤 **便捷发布** - 认证上传至图表社区
|
|
12
|
+
- 🔧 **开发友好** - 一键启动图表包本地开发调试
|
|
13
|
+
- 📦 **智能打包** - 版本同步、自动压缩、一键生成 tar.gz 发布产物
|
|
15
14
|
- ⚙️ **灵活配置** - 自动化行为可自定义
|
|
16
15
|
|
|
17
16
|
## 特性
|
|
18
17
|
|
|
19
|
-
- ✅ 支持
|
|
18
|
+
- ✅ 支持 9 种图表类型(折线图、柱状图、饼图、表格、地图、文本、指标、交互、其他)
|
|
20
19
|
- ✅ 可选 TypeScript 支持
|
|
21
20
|
- ✅ 交互式命令行提示
|
|
22
|
-
- ✅ 自动版本同步(base.json ↔ package.json)
|
|
23
|
-
- ✅
|
|
24
|
-
- ✅ tar.gz 压缩包生成
|
|
25
|
-
- ✅ 用户认证与 token 管理
|
|
21
|
+
- ✅ 自动版本同步(public/base.json ↔ package.json)
|
|
22
|
+
- ✅ 单图表一键打包为 tar.gz
|
|
26
23
|
- ✅ 自动更新检测
|
|
27
24
|
- ✅ 跨平台支持(macOS / Windows / Linux)
|
|
28
25
|
|
|
@@ -88,18 +85,14 @@ pnpm dev
|
|
|
88
85
|
# 1. 创建图表包
|
|
89
86
|
pv create my-chart
|
|
90
87
|
|
|
91
|
-
# 2.
|
|
88
|
+
# 2. 进入图表包目录
|
|
92
89
|
cd packages/components/my-chart
|
|
90
|
+
|
|
91
|
+
# 3. 启动开发环境
|
|
93
92
|
pnpm dev
|
|
94
93
|
|
|
95
|
-
#
|
|
94
|
+
# 4. 打包构建(在图表包目录)
|
|
96
95
|
pv build
|
|
97
|
-
|
|
98
|
-
# 4. 用户认证
|
|
99
|
-
pv auth
|
|
100
|
-
|
|
101
|
-
# 5. 上传发布
|
|
102
|
-
pv upload my-chart_v1.0.0.tar.gz
|
|
103
96
|
```
|
|
104
97
|
|
|
105
98
|
## 命令详解
|
|
@@ -128,7 +121,7 @@ pv c <project-name>
|
|
|
128
121
|
- `text` - 文本
|
|
129
122
|
- `indicator` - 指标
|
|
130
123
|
- `interaction` - 交互
|
|
131
|
-
- `other` -
|
|
124
|
+
- `other` - 其他(默认选中,推荐)
|
|
132
125
|
|
|
133
126
|
2. **TypeScript 支持**:
|
|
134
127
|
- `yes` - 启用 TypeScript
|
|
@@ -137,6 +130,7 @@ pv c <project-name>
|
|
|
137
130
|
3. **图表命名规则**:
|
|
138
131
|
- 必须以小写字母开头
|
|
139
132
|
- 仅允许小写字母、数字、下划线
|
|
133
|
+
- 长度 1-100 字符
|
|
140
134
|
- 推荐添加自定义前缀防止冲突
|
|
141
135
|
|
|
142
136
|
**示例**:
|
|
@@ -154,15 +148,13 @@ pv create custom_bar_chart
|
|
|
154
148
|
|
|
155
149
|
图表创建位置取决于当前工作目录:
|
|
156
150
|
|
|
157
|
-
-
|
|
158
|
-
-
|
|
159
|
-
-
|
|
151
|
+
- **当前目录或其上级目录(最多向上 10 层)具备图表库特征**(`package.json` 包名含 `pangu` + `packages/components` + `packages/tailored`):
|
|
152
|
+
- 在特征目录下归位:`packages/components/<project-name>/`
|
|
153
|
+
- 运行路径包含 "tailored" 时:`packages/tailored/<project-name>/`
|
|
160
154
|
|
|
161
|
-
-
|
|
155
|
+
- **其他目录**:
|
|
162
156
|
- 当前目录下创建:`./<project-name>/`
|
|
163
157
|
|
|
164
|
-
> 💡 **提示**:在子目录运行时,图表会在当前目录创建,不会跳转到根目录 `packages/`。
|
|
165
|
-
|
|
166
158
|
**自动执行**:
|
|
167
159
|
|
|
168
160
|
- 复制模板文件
|
|
@@ -201,14 +193,13 @@ pv build packages/components/my-chart
|
|
|
201
193
|
|
|
202
194
|
**打包流程**:
|
|
203
195
|
|
|
204
|
-
1. 版本同步(`base.json` ↔ `package.json`)
|
|
196
|
+
1. 版本同步(`public/base.json` ↔ `package.json`)
|
|
205
197
|
2. 执行 `pnpm build`
|
|
206
198
|
3. 生成产物目录:`<chart-name>_v<version>/`
|
|
207
199
|
4. 可选删除 `es/` 目录(根据配置)
|
|
208
200
|
5. 过滤无用文件(`.git`, `.vscode`, `.DS_Store`, `.idea`)
|
|
209
201
|
6. 打包为 tar.gz:`<chart-name>_v<version>.tar.gz`
|
|
210
202
|
7. 可选删除打包目录(根据配置 `autoRemove`)
|
|
211
|
-
8. 可选自动上传(根据配置 `autoUpload`)
|
|
212
203
|
|
|
213
204
|
**产物文件**:
|
|
214
205
|
|
|
@@ -228,12 +219,9 @@ my-chart_v1.0.0.tar.gz
|
|
|
228
219
|
|
|
229
220
|
```bash
|
|
230
221
|
pv dev # 启动当前目录开发环境
|
|
231
|
-
pv dev <path> # 启动指定路径开发环境
|
|
232
222
|
```
|
|
233
223
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
- `<path>` - 图表包路径
|
|
224
|
+
需先 cd 到图表包目录再执行。
|
|
237
225
|
|
|
238
226
|
**示例**:
|
|
239
227
|
|
|
@@ -241,146 +229,16 @@ pv dev <path> # 启动指定路径开发环境
|
|
|
241
229
|
# 在图表包目录下执行
|
|
242
230
|
cd packages/components/my-chart
|
|
243
231
|
pv dev
|
|
244
|
-
|
|
245
|
-
# 指定路径启动
|
|
246
|
-
pv dev packages/components/my-chart
|
|
247
232
|
```
|
|
248
233
|
|
|
249
234
|
**自动检测**:
|
|
250
235
|
|
|
251
|
-
- 查找 `package.json` 中的 `dev`
|
|
252
|
-
- 执行
|
|
236
|
+
- 查找 `package.json` 中的 `dev` 脚本
|
|
237
|
+
- 执行 `<探测到的包管理器> run dev`
|
|
253
238
|
- 实时预览图表开发效果
|
|
254
239
|
|
|
255
240
|
---
|
|
256
241
|
|
|
257
|
-
### pv upload - 上传图表包
|
|
258
|
-
|
|
259
|
-
上传打包后的 tar.gz 文件至泰合社区服务器。
|
|
260
|
-
|
|
261
|
-
**别名**:`pv u`
|
|
262
|
-
|
|
263
|
-
**前置条件**:需先通过 `pv auth` 进行用户认证。
|
|
264
|
-
|
|
265
|
-
**用法**:
|
|
266
|
-
|
|
267
|
-
```bash
|
|
268
|
-
pv upload # 上传当前目录所有 .tar.gz 文件
|
|
269
|
-
pv upload <file.tar.gz> # 上传指定 tar.gz 文件
|
|
270
|
-
pv upload <path> # 上传指定目录下的所有 .tar.gz 文件
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
**参数**:
|
|
274
|
-
|
|
275
|
-
- `<file.tar.gz>` - tar.gz 文件路径
|
|
276
|
-
- `<path>` - 目录路径
|
|
277
|
-
|
|
278
|
-
**示例**:
|
|
279
|
-
|
|
280
|
-
```bash
|
|
281
|
-
# 用户认证(首次)
|
|
282
|
-
pv auth
|
|
283
|
-
|
|
284
|
-
# 上传当前目录所有 tar.gz
|
|
285
|
-
pv upload
|
|
286
|
-
|
|
287
|
-
# 上传指定文件
|
|
288
|
-
pv upload my-chart_v1.0.0.tar.gz
|
|
289
|
-
|
|
290
|
-
# 上传指定目录下的所有 tar.gz
|
|
291
|
-
pv upload dist/
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
**认证要求**:
|
|
295
|
-
|
|
296
|
-
- 未登录时自动触发认证流程
|
|
297
|
-
- 需输入泰合社区用户名和密码
|
|
298
|
-
- token 自动保存,后续无需重复登录
|
|
299
|
-
|
|
300
|
-
---
|
|
301
|
-
|
|
302
|
-
### pv auth - 用户认证
|
|
303
|
-
|
|
304
|
-
登录泰合社区,获取上传权限。
|
|
305
|
-
|
|
306
|
-
**别名**:`pv a`
|
|
307
|
-
|
|
308
|
-
**用法**:
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
pv auth # 交互式登录
|
|
312
|
-
pv auth <user> <password> # 命令行登录
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
**参数**:
|
|
316
|
-
|
|
317
|
-
- `<user>` - 泰合社区用户名
|
|
318
|
-
- `<password>` - 泰合社区密码
|
|
319
|
-
|
|
320
|
-
**示例**:
|
|
321
|
-
|
|
322
|
-
```bash
|
|
323
|
-
# 交互式登录(推荐)
|
|
324
|
-
pv auth
|
|
325
|
-
# 按提示输入用户名和密码
|
|
326
|
-
|
|
327
|
-
# 命令行登录
|
|
328
|
-
pv auth myuser mypassword
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
**认证流程**:
|
|
332
|
-
|
|
333
|
-
1. 输入用户名和密码(密码经 MD5 加密)
|
|
334
|
-
2. 请求服务器 token
|
|
335
|
-
3. 保存认证信息至本地配置文件
|
|
336
|
-
|
|
337
|
-
**认证信息存储位置**:
|
|
338
|
-
|
|
339
|
-
```
|
|
340
|
-
~/.pangu-vis-store/.cli_store
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
**认证失败处理**:
|
|
344
|
-
|
|
345
|
-
- 失败后可重试(最多 3 次)
|
|
346
|
-
- 失败 3 次后提示稍后尝试
|
|
347
|
-
|
|
348
|
-
---
|
|
349
|
-
|
|
350
|
-
### pv tar - tar 打包工具
|
|
351
|
-
|
|
352
|
-
通用的 tar.gz 打包命令,可打包任意目录或文件。
|
|
353
|
-
|
|
354
|
-
**别名**:`pv t`
|
|
355
|
-
|
|
356
|
-
**用法**:
|
|
357
|
-
|
|
358
|
-
```bash
|
|
359
|
-
pv tar <targetDir> <name> [distDir] [distName]
|
|
360
|
-
```
|
|
361
|
-
|
|
362
|
-
**参数**:
|
|
363
|
-
|
|
364
|
-
- `<targetDir>` - 目标目录(必需)
|
|
365
|
-
- `<name>` - 打包文件名(必需)
|
|
366
|
-
- `<distDir>` - 输出目录(可选,默认为 targetDir)
|
|
367
|
-
- `<distName>` - 输出文件名(可选,默认为 name)
|
|
368
|
-
|
|
369
|
-
**示例**:
|
|
370
|
-
|
|
371
|
-
```bash
|
|
372
|
-
# 打包当前目录下的 dist 为 dist.tar.gz
|
|
373
|
-
pv tar ./dist dist
|
|
374
|
-
|
|
375
|
-
# 打包并指定输出目录
|
|
376
|
-
pv tar ./dist dist ./output
|
|
377
|
-
|
|
378
|
-
# 打包并指定输出文件名
|
|
379
|
-
pv tar ./dist dist ./output my-dist
|
|
380
|
-
```
|
|
381
|
-
|
|
382
|
-
---
|
|
383
|
-
|
|
384
242
|
### pv config - 配置管理
|
|
385
243
|
|
|
386
244
|
配置 CLI 工具的自动化行为。
|
|
@@ -395,11 +253,10 @@ pv config
|
|
|
395
253
|
|
|
396
254
|
**交互式配置项**:
|
|
397
255
|
|
|
398
|
-
| 配置项 | 说明
|
|
399
|
-
| -------------- |
|
|
400
|
-
| `
|
|
401
|
-
| `
|
|
402
|
-
| `autoRemoveEs` | 打包后是否移除 es 目录 | `yes` (true) |
|
|
256
|
+
| 配置项 | 说明 | 默认值 |
|
|
257
|
+
| -------------- | -------------------------- | ------------ |
|
|
258
|
+
| `autoRemove` | 打包后是否自动删除打包目录 | `yes` (true) |
|
|
259
|
+
| `autoRemoveEs` | 打包后是否移除 es 目录 | `yes` (true) |
|
|
403
260
|
|
|
404
261
|
**示例**:
|
|
405
262
|
|
|
@@ -418,12 +275,10 @@ pv config
|
|
|
418
275
|
|
|
419
276
|
```json
|
|
420
277
|
{
|
|
421
|
-
"user": "your-username",
|
|
422
|
-
"password": "your-password",
|
|
423
|
-
"token": "your-token",
|
|
424
|
-
"autoUpload": false,
|
|
425
278
|
"autoRemove": true,
|
|
426
|
-
"autoRemoveEs": true
|
|
279
|
+
"autoRemoveEs": true,
|
|
280
|
+
"lastUpdateCheck": 1788480000000,
|
|
281
|
+
"privateRegistry": "http://192.168.12.88:10000"
|
|
427
282
|
}
|
|
428
283
|
```
|
|
429
284
|
|
|
@@ -443,10 +298,9 @@ pv update
|
|
|
443
298
|
|
|
444
299
|
**更新流程**:
|
|
445
300
|
|
|
446
|
-
1. 检查 npm
|
|
447
|
-
2.
|
|
448
|
-
3.
|
|
449
|
-
4. macOS/Linux 自动启用 sudo(如需)
|
|
301
|
+
1. 检查 npm 源最新版本
|
|
302
|
+
2. 安装前确认提示「是否安装 <版本>?」(默认 yes,可跳过;跳过后提示稍后可再运行 `pvis update`)
|
|
303
|
+
3. 优先用探测到的 pnpm(不可用时回退 npm)执行 `install -g pangu-vis-cli@latest`
|
|
450
304
|
|
|
451
305
|
**示例**:
|
|
452
306
|
|
|
@@ -455,10 +309,11 @@ pv update
|
|
|
455
309
|
pv update
|
|
456
310
|
|
|
457
311
|
# 已是最新版本提示
|
|
458
|
-
|
|
312
|
+
当前已是最新版本 1.1.0
|
|
459
313
|
|
|
460
314
|
# 有新版本时提示
|
|
461
|
-
|
|
315
|
+
发现新版本 1.2.0,当前版本 1.1.0
|
|
316
|
+
是否安装 1.2.0?
|
|
462
317
|
```
|
|
463
318
|
|
|
464
319
|
**自动检查**:
|
|
@@ -478,16 +333,16 @@ CLI 配置信息存储在用户主目录:
|
|
|
478
333
|
~/.pangu-vis-store/.cli_store
|
|
479
334
|
```
|
|
480
335
|
|
|
336
|
+
可通过环境变量 `PANGU_CONFIG_DIR` 覆盖配置目录位置。
|
|
337
|
+
|
|
481
338
|
### 配置项说明
|
|
482
339
|
|
|
483
|
-
| 配置项
|
|
484
|
-
|
|
|
485
|
-
| `
|
|
486
|
-
| `
|
|
487
|
-
| `
|
|
488
|
-
| `
|
|
489
|
-
| `autoRemove` | boolean | 打包后删除打包目录 | `true` |
|
|
490
|
-
| `autoRemoveEs` | boolean | 打包后删除 es 目录 | `true` |
|
|
340
|
+
| 配置项 | 类型 | 说明 | 默认值 |
|
|
341
|
+
| ----------------- | ------- | ------------------------------------------------------------------------------ | ---------- |
|
|
342
|
+
| `autoRemove` | boolean | 打包后是否自动删除打包目录 | `true` |
|
|
343
|
+
| `autoRemoveEs` | boolean | 打包后是否自动删除 es 目录 | `true` |
|
|
344
|
+
| `lastUpdateCheck` | number | 更新检查节流时间戳(可选) | 无 |
|
|
345
|
+
| `privateRegistry` | string | 私有 npm 源(可选,优先级:`PANGU_REGISTRY` 环境变量 > 配置文件 > 内网默认源) | 内网默认源 |
|
|
491
346
|
|
|
492
347
|
### 修改配置
|
|
493
348
|
|
|
@@ -500,18 +355,6 @@ pv config
|
|
|
500
355
|
**方法 2:手动编辑**
|
|
501
356
|
编辑 `~/.pangu-vis-store/.cli_store` 文件。
|
|
502
357
|
|
|
503
|
-
### 清除认证
|
|
504
|
-
|
|
505
|
-
如需重新登录,删除配置文件中的 `token` 字段:
|
|
506
|
-
|
|
507
|
-
```bash
|
|
508
|
-
# 编辑配置文件
|
|
509
|
-
vi ~/.pangu-vis-store/.cli_store
|
|
510
|
-
|
|
511
|
-
# 删除 token 行后重新认证
|
|
512
|
-
pv auth
|
|
513
|
-
```
|
|
514
|
-
|
|
515
358
|
## 使用示例
|
|
516
359
|
|
|
517
360
|
### 示例:创建并打包折线图
|
|
@@ -537,16 +380,13 @@ pv build
|
|
|
537
380
|
|
|
538
381
|
## 命令速查表
|
|
539
382
|
|
|
540
|
-
| 命令 | 别名 | 说明 |
|
|
541
|
-
| ----------- | -------- | ------------ |
|
|
542
|
-
| `pv create` | `pv c` | 创建图表包 |
|
|
543
|
-
| `pv build` | `pv b` | 单个图表打包 |
|
|
544
|
-
| `pv dev` | `pv d` | 启动开发环境 |
|
|
545
|
-
| `pv
|
|
546
|
-
| `pv
|
|
547
|
-
| `pv tar` | `pv t` | tar 打包工具 | ❌ |
|
|
548
|
-
| `pv config` | `pv set` | 配置管理 | ❌ |
|
|
549
|
-
| `pv update` | `pv up` | CLI 更新 | ❌ |
|
|
383
|
+
| 命令 | 别名 | 说明 |
|
|
384
|
+
| ----------- | -------- | ------------ |
|
|
385
|
+
| `pv create` | `pv c` | 创建图表包 |
|
|
386
|
+
| `pv build` | `pv b` | 单个图表打包 |
|
|
387
|
+
| `pv dev` | `pv d` | 启动开发环境 |
|
|
388
|
+
| `pv config` | `pv set` | 配置管理 |
|
|
389
|
+
| `pv update` | `pv up` | CLI 更新 |
|
|
550
390
|
|
|
551
391
|
## 常见问题
|
|
552
392
|
|
|
@@ -561,63 +401,28 @@ sudo npm install -g pangu-vis-cli
|
|
|
561
401
|
**Windows**:
|
|
562
402
|
以管理员身份运行终端,再执行安装命令。
|
|
563
403
|
|
|
564
|
-
### 2.
|
|
565
|
-
|
|
566
|
-
- 检查用户名和密码是否正确
|
|
567
|
-
- 确认泰合社区账号已激活
|
|
568
|
-
- 失败 3 次后需稍后再试
|
|
569
|
-
|
|
570
|
-
### 3. 图表包名称重复
|
|
404
|
+
### 2. 图表包名称重复
|
|
571
405
|
|
|
572
406
|
- 使用自定义前缀避免冲突
|
|
573
|
-
-
|
|
407
|
+
- 遵循命名规则:小写字母开头,仅允许小写字母、数字、下划线
|
|
574
408
|
|
|
575
|
-
###
|
|
409
|
+
### 3. 打包产物找不到
|
|
576
410
|
|
|
577
411
|
- 检查配置 `autoRemove` 是否为 `yes`
|
|
578
412
|
- 打包产物默认在图表包目录下
|
|
579
|
-
- 使用 `pv tar` 手动指定输出目录
|
|
580
|
-
|
|
581
|
-
### 5. 上传失败
|
|
582
|
-
|
|
583
|
-
- 确认已通过 `pv auth` 认证
|
|
584
|
-
- 检查网络连接(泰合社区服务器)
|
|
585
|
-
- 确认 tar.gz 文件格式正确
|
|
586
413
|
|
|
587
|
-
###
|
|
414
|
+
### 4. 版本号不同步
|
|
588
415
|
|
|
589
|
-
- CLI 自动同步 `base.json` 和 `package.json` 版本
|
|
416
|
+
- CLI 自动同步 `public/base.json` 和 `package.json` 版本
|
|
590
417
|
- 手动修改版本时需同时更新两个文件
|
|
591
418
|
- 或使用 `pv build` 自动同步
|
|
592
419
|
|
|
593
|
-
###
|
|
420
|
+
### 5. 开发环境启动失败
|
|
594
421
|
|
|
595
422
|
- 确认已安装 `pnpm`
|
|
596
|
-
- 检查 `package.json` 中是否有 `dev`
|
|
423
|
+
- 检查 `package.json` 中是否有 `dev` 脚本
|
|
597
424
|
- 安装依赖:`pnpm install`
|
|
598
425
|
|
|
599
|
-
## 开发环境(本仓库)
|
|
600
|
-
|
|
601
|
-
| 项 | 要求/工具 |
|
|
602
|
-
| ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
603
|
-
| Node.js | `>=20.19.0`(engines 强制) |
|
|
604
|
-
| TypeScript | `7.0.2`(原生编译器线,仅类型检查,esbuild 出产物;编辑器语言服务走 VS Code 内置 TS 扩展,原生 LSP 可选装 "TypeScript (Native Preview)" 扩展) |
|
|
605
|
-
| 代码检查 | `oxlint`(配置 `.oxlintrc.json`) |
|
|
606
|
-
| 代码格式化 | `oxfmt`(配置 `.oxfmtrc.json`,tab 缩进、行宽 100、双引号、分号、ES5 尾逗号) |
|
|
607
|
-
| 单元测试 | `vitest`(302 用例) |
|
|
608
|
-
| 包管理 | `nub`(兼容 pnpm 参数) |
|
|
609
|
-
|
|
610
|
-
常用开发命令(本仓库统一 `nub`,禁用 npm/pnpm/yarn/npx):
|
|
611
|
-
|
|
612
|
-
```bash
|
|
613
|
-
nub install # 安装依赖
|
|
614
|
-
nub run typecheck # tsc 7.0.2 类型检查
|
|
615
|
-
nub run test:run # vitest 全量测试
|
|
616
|
-
nub run lint # oxlint 检查
|
|
617
|
-
nub run format:check # oxfmt 格式检查
|
|
618
|
-
nub run build # esbuild 构建
|
|
619
|
-
```
|
|
620
|
-
|
|
621
426
|
## 许可证
|
|
622
427
|
|
|
623
428
|
[MIT License](./LICENSE)
|
|
@@ -629,8 +434,3 @@ Copyright (c) 2023 Jaxon
|
|
|
629
434
|
**Jaxon**
|
|
630
435
|
|
|
631
436
|
如有问题或建议,请联系作者或在项目仓库提交 Issue。
|
|
632
|
-
|
|
633
|
-
---
|
|
634
|
-
|
|
635
|
-
**最后更新**:2026-06-17
|
|
636
|
-
**版本**:1.0.0
|
package/dist/index.js
CHANGED
|
@@ -1,36 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var __create = Object.create;
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
4
|
var __esm = (fn, res) => function __init() {
|
|
9
5
|
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
10
6
|
};
|
|
11
|
-
var __commonJS = (cb, mod) => function __require() {
|
|
12
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
13
|
-
};
|
|
14
7
|
var __export = (target, all) => {
|
|
15
8
|
for (var name in all)
|
|
16
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
17
10
|
};
|
|
18
|
-
var __copyProps = (to4, from, except, desc) => {
|
|
19
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
20
|
-
for (let key of __getOwnPropNames(from))
|
|
21
|
-
if (!__hasOwnProp.call(to4, key) && key !== except)
|
|
22
|
-
__defProp(to4, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
23
|
-
}
|
|
24
|
-
return to4;
|
|
25
|
-
};
|
|
26
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
27
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
28
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
29
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
30
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
31
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
32
|
-
mod
|
|
33
|
-
));
|
|
34
11
|
|
|
35
12
|
// src/types/cli.ts
|
|
36
13
|
var DEFAULT_CLI_CONFIG;
|
|
@@ -148,84 +125,12 @@ var init_config = __esm({
|
|
|
148
125
|
}
|
|
149
126
|
});
|
|
150
127
|
|
|
151
|
-
// node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js
|
|
152
|
-
var require_picocolors = __commonJS({
|
|
153
|
-
"node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js"(exports, module) {
|
|
154
|
-
var p2 = process || {};
|
|
155
|
-
var argv = p2.argv || [];
|
|
156
|
-
var env = p2.env || {};
|
|
157
|
-
var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p2.platform === "win32" || (p2.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
|
|
158
|
-
var formatter = (open, close, replace = open) => (input) => {
|
|
159
|
-
let string = "" + input, index = string.indexOf(close, open.length);
|
|
160
|
-
return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close;
|
|
161
|
-
};
|
|
162
|
-
var replaceClose = (string, close, replace, index) => {
|
|
163
|
-
let result = "", cursor = 0;
|
|
164
|
-
do {
|
|
165
|
-
result += string.substring(cursor, index) + replace;
|
|
166
|
-
cursor = index + close.length;
|
|
167
|
-
index = string.indexOf(close, cursor);
|
|
168
|
-
} while (~index);
|
|
169
|
-
return result + string.substring(cursor);
|
|
170
|
-
};
|
|
171
|
-
var createColors = (enabled = isColorSupported) => {
|
|
172
|
-
let f = enabled ? formatter : () => String;
|
|
173
|
-
return {
|
|
174
|
-
isColorSupported: enabled,
|
|
175
|
-
reset: f("\x1B[0m", "\x1B[0m"),
|
|
176
|
-
bold: f("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
|
|
177
|
-
dim: f("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
|
|
178
|
-
italic: f("\x1B[3m", "\x1B[23m"),
|
|
179
|
-
underline: f("\x1B[4m", "\x1B[24m"),
|
|
180
|
-
inverse: f("\x1B[7m", "\x1B[27m"),
|
|
181
|
-
hidden: f("\x1B[8m", "\x1B[28m"),
|
|
182
|
-
strikethrough: f("\x1B[9m", "\x1B[29m"),
|
|
183
|
-
black: f("\x1B[30m", "\x1B[39m"),
|
|
184
|
-
red: f("\x1B[31m", "\x1B[39m"),
|
|
185
|
-
green: f("\x1B[32m", "\x1B[39m"),
|
|
186
|
-
yellow: f("\x1B[33m", "\x1B[39m"),
|
|
187
|
-
blue: f("\x1B[34m", "\x1B[39m"),
|
|
188
|
-
magenta: f("\x1B[35m", "\x1B[39m"),
|
|
189
|
-
cyan: f("\x1B[36m", "\x1B[39m"),
|
|
190
|
-
white: f("\x1B[37m", "\x1B[39m"),
|
|
191
|
-
gray: f("\x1B[90m", "\x1B[39m"),
|
|
192
|
-
bgBlack: f("\x1B[40m", "\x1B[49m"),
|
|
193
|
-
bgRed: f("\x1B[41m", "\x1B[49m"),
|
|
194
|
-
bgGreen: f("\x1B[42m", "\x1B[49m"),
|
|
195
|
-
bgYellow: f("\x1B[43m", "\x1B[49m"),
|
|
196
|
-
bgBlue: f("\x1B[44m", "\x1B[49m"),
|
|
197
|
-
bgMagenta: f("\x1B[45m", "\x1B[49m"),
|
|
198
|
-
bgCyan: f("\x1B[46m", "\x1B[49m"),
|
|
199
|
-
bgWhite: f("\x1B[47m", "\x1B[49m"),
|
|
200
|
-
blackBright: f("\x1B[90m", "\x1B[39m"),
|
|
201
|
-
redBright: f("\x1B[91m", "\x1B[39m"),
|
|
202
|
-
greenBright: f("\x1B[92m", "\x1B[39m"),
|
|
203
|
-
yellowBright: f("\x1B[93m", "\x1B[39m"),
|
|
204
|
-
blueBright: f("\x1B[94m", "\x1B[39m"),
|
|
205
|
-
magentaBright: f("\x1B[95m", "\x1B[39m"),
|
|
206
|
-
cyanBright: f("\x1B[96m", "\x1B[39m"),
|
|
207
|
-
whiteBright: f("\x1B[97m", "\x1B[39m"),
|
|
208
|
-
bgBlackBright: f("\x1B[100m", "\x1B[49m"),
|
|
209
|
-
bgRedBright: f("\x1B[101m", "\x1B[49m"),
|
|
210
|
-
bgGreenBright: f("\x1B[102m", "\x1B[49m"),
|
|
211
|
-
bgYellowBright: f("\x1B[103m", "\x1B[49m"),
|
|
212
|
-
bgBlueBright: f("\x1B[104m", "\x1B[49m"),
|
|
213
|
-
bgMagentaBright: f("\x1B[105m", "\x1B[49m"),
|
|
214
|
-
bgCyanBright: f("\x1B[106m", "\x1B[49m"),
|
|
215
|
-
bgWhiteBright: f("\x1B[107m", "\x1B[49m")
|
|
216
|
-
};
|
|
217
|
-
};
|
|
218
|
-
module.exports = createColors();
|
|
219
|
-
module.exports.createColors = createColors;
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
|
|
223
128
|
// src/utils/log.ts
|
|
224
|
-
|
|
129
|
+
import pc from "picocolors";
|
|
130
|
+
var log, exit;
|
|
225
131
|
var init_log = __esm({
|
|
226
132
|
"src/utils/log.ts"() {
|
|
227
133
|
"use strict";
|
|
228
|
-
import_picocolors = __toESM(require_picocolors(), 1);
|
|
229
134
|
log = {
|
|
230
135
|
/**
|
|
231
136
|
* 输出成功消息(绿色)
|
|
@@ -233,7 +138,7 @@ var init_log = __esm({
|
|
|
233
138
|
* @returns 无返回值
|
|
234
139
|
*/
|
|
235
140
|
success(message) {
|
|
236
|
-
process.stdout.write(`${
|
|
141
|
+
process.stdout.write(`${pc.green(message)}
|
|
237
142
|
`);
|
|
238
143
|
},
|
|
239
144
|
/**
|
|
@@ -242,7 +147,7 @@ var init_log = __esm({
|
|
|
242
147
|
* @returns 无返回值
|
|
243
148
|
*/
|
|
244
149
|
err(message) {
|
|
245
|
-
process.stderr.write(`${
|
|
150
|
+
process.stderr.write(`${pc.bold(pc.red(message))}
|
|
246
151
|
`);
|
|
247
152
|
},
|
|
248
153
|
/**
|
|
@@ -251,7 +156,7 @@ var init_log = __esm({
|
|
|
251
156
|
* @returns 无返回值
|
|
252
157
|
*/
|
|
253
158
|
info(message) {
|
|
254
|
-
process.stdout.write(`${
|
|
159
|
+
process.stdout.write(`${pc.blue(message)}
|
|
255
160
|
`);
|
|
256
161
|
},
|
|
257
162
|
/**
|
|
@@ -260,7 +165,7 @@ var init_log = __esm({
|
|
|
260
165
|
* @returns 无返回值
|
|
261
166
|
*/
|
|
262
167
|
warn(message) {
|
|
263
|
-
process.stdout.write(`${
|
|
168
|
+
process.stdout.write(`${pc.yellow(message)}
|
|
264
169
|
`);
|
|
265
170
|
},
|
|
266
171
|
/**
|
|
@@ -300,8 +205,6 @@ __export(process_exports, {
|
|
|
300
205
|
getCdRelativePath: () => getCdRelativePath,
|
|
301
206
|
getGitUser: () => getGitUser,
|
|
302
207
|
getPackageName: () => getPackageName,
|
|
303
|
-
get_plugin_latest_version: () => get_plugin_latest_version,
|
|
304
|
-
get_plugin_version: () => get_plugin_version,
|
|
305
208
|
runAsyncCmd: () => runAsyncCmd,
|
|
306
209
|
userInfo: () => userInfo,
|
|
307
210
|
wait: () => wait,
|
|
@@ -312,18 +215,13 @@ import { promisify } from "node:util";
|
|
|
312
215
|
import { $ } from "execa";
|
|
313
216
|
import figlet from "figlet";
|
|
314
217
|
import _ from "lodash";
|
|
315
|
-
var camelCase, upperFirst, detectPackageManager, userInfo, getPackageName, wait, welcomeCli, compareVersion, getCdRelativePath, runAsyncCmd, getGitUser
|
|
218
|
+
var camelCase, upperFirst, detectPackageManager, userInfo, getPackageName, wait, welcomeCli, compareVersion, getCdRelativePath, runAsyncCmd, getGitUser;
|
|
316
219
|
var init_process = __esm({
|
|
317
220
|
"src/utils/process.ts"() {
|
|
318
221
|
"use strict";
|
|
319
222
|
init_log();
|
|
320
223
|
({ camelCase, upperFirst } = _);
|
|
321
224
|
detectPackageManager = async () => {
|
|
322
|
-
try {
|
|
323
|
-
await $`nub --version`;
|
|
324
|
-
return "nub";
|
|
325
|
-
} catch {
|
|
326
|
-
}
|
|
327
225
|
try {
|
|
328
226
|
await $`pnpm --version`;
|
|
329
227
|
return "pnpm";
|
|
@@ -394,21 +292,6 @@ var init_process = __esm({
|
|
|
394
292
|
return "";
|
|
395
293
|
}
|
|
396
294
|
};
|
|
397
|
-
get_plugin_version = async (pluginName) => {
|
|
398
|
-
if (!pluginName) return "";
|
|
399
|
-
try {
|
|
400
|
-
const args = ["view", pluginName, "version"];
|
|
401
|
-
const result = await $`npm ${args}`;
|
|
402
|
-
return result.stdout.trim();
|
|
403
|
-
} catch {
|
|
404
|
-
return "";
|
|
405
|
-
}
|
|
406
|
-
};
|
|
407
|
-
get_plugin_latest_version = async (pluginName, defaultVersion = "") => {
|
|
408
|
-
if (!pluginName) return {};
|
|
409
|
-
const version2 = await get_plugin_version(pluginName) || defaultVersion;
|
|
410
|
-
return { [pluginName]: `^${version2}` };
|
|
411
|
-
};
|
|
412
295
|
}
|
|
413
296
|
});
|
|
414
297
|
|
|
@@ -422,7 +305,7 @@ var init_package = __esm({
|
|
|
422
305
|
"package.json"() {
|
|
423
306
|
package_default = {
|
|
424
307
|
name: "pangu-vis-cli",
|
|
425
|
-
version: "1.1
|
|
308
|
+
version: "1.2.1",
|
|
426
309
|
description: "vis-cli",
|
|
427
310
|
keywords: [
|
|
428
311
|
"pangu-vis",
|
|
@@ -573,7 +456,6 @@ async function getLatestVersion(packageName, defaultValue) {
|
|
|
573
456
|
signal: AbortSignal.timeout(5e3)
|
|
574
457
|
});
|
|
575
458
|
if (!response.ok) {
|
|
576
|
-
latestVersionCache.set(cacheKey, defaultValue);
|
|
577
459
|
return defaultValue;
|
|
578
460
|
}
|
|
579
461
|
const data = await response.json();
|
|
@@ -582,13 +464,10 @@ async function getLatestVersion(packageName, defaultValue) {
|
|
|
582
464
|
latestVersionCache.set(cacheKey, result);
|
|
583
465
|
return result;
|
|
584
466
|
} catch (_error) {
|
|
585
|
-
if (packageName) {
|
|
586
|
-
latestVersionCache.set(`${packageName}\0${defaultValue ?? ""}`, defaultValue);
|
|
587
|
-
}
|
|
588
467
|
return defaultValue;
|
|
589
468
|
}
|
|
590
469
|
}
|
|
591
|
-
async function
|
|
470
|
+
async function get_plugin_latest_version(packageName, defaultValue) {
|
|
592
471
|
if (!packageName) {
|
|
593
472
|
return {};
|
|
594
473
|
}
|
|
@@ -889,7 +768,7 @@ import { to as to2 } from "await-to-js";
|
|
|
889
768
|
import fs4 from "fs-extra";
|
|
890
769
|
import _2 from "lodash";
|
|
891
770
|
import tar from "tar";
|
|
892
|
-
var mergeWith, isArray, getPath, buildTarHandler, filterFile, scanDirHandle, updatePackageJson, outputVueName, isChartModuleRoot, scanFileFindChart, cachedScanResult, cachedScanRoot, scanAllDirectories, clearScanCache;
|
|
771
|
+
var mergeWith, isArray, getPath, buildTarHandler, filterFileWorker, filterFile, scanDirHandle, updatePackageJson, outputVueName, isChartModuleRoot, scanFileFindChart, cachedScanResult, cachedScanRoot, scanAllDirectories, clearScanCache;
|
|
893
772
|
var init_fs = __esm({
|
|
894
773
|
"src/utils/fs.ts"() {
|
|
895
774
|
"use strict";
|
|
@@ -924,24 +803,36 @@ var init_fs = __esm({
|
|
|
924
803
|
writeStream.on("error", reject);
|
|
925
804
|
});
|
|
926
805
|
};
|
|
806
|
+
filterFileWorker = async (dir, ignoreFiles) => {
|
|
807
|
+
const [err, resDir] = await to2(fs4.readdir(dir));
|
|
808
|
+
if (err) {
|
|
809
|
+
return exit(err.message);
|
|
810
|
+
}
|
|
811
|
+
await Promise.all(
|
|
812
|
+
resDir.map(async (v) => {
|
|
813
|
+
const itemPath = path4.resolve(dir, v);
|
|
814
|
+
if (ignoreFiles.includes(v)) {
|
|
815
|
+
await fs4.remove(itemPath);
|
|
816
|
+
return;
|
|
817
|
+
}
|
|
818
|
+
const itemStats = await fs4.stat(itemPath);
|
|
819
|
+
if (itemStats.isDirectory()) {
|
|
820
|
+
await filterFileWorker(itemPath, ignoreFiles);
|
|
821
|
+
}
|
|
822
|
+
})
|
|
823
|
+
);
|
|
824
|
+
};
|
|
927
825
|
filterFile = async (dirPath, ignoreFiles = [".git", ".vscode", ".DS_Store", ".idea"]) => {
|
|
928
826
|
const dir = dirPath || process.cwd();
|
|
929
827
|
const res = await fs4.pathExists(dir);
|
|
930
828
|
if (res) {
|
|
829
|
+
const rootSegments = dir.split(path4.sep);
|
|
830
|
+
if (ignoreFiles.some((ignoreFile) => rootSegments.includes(ignoreFile))) {
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
931
833
|
const isDir = await fs4.stat(dir);
|
|
932
834
|
if (isDir.isDirectory()) {
|
|
933
|
-
|
|
934
|
-
if (err) {
|
|
935
|
-
return exit(err.message);
|
|
936
|
-
}
|
|
937
|
-
await Promise.all(resDir.map((v) => filterFile(path4.resolve(dir, v), ignoreFiles)));
|
|
938
|
-
} else {
|
|
939
|
-
for (const ignoreFile of ignoreFiles) {
|
|
940
|
-
if (dir.includes(ignoreFile)) {
|
|
941
|
-
await fs4.remove(dir);
|
|
942
|
-
return;
|
|
943
|
-
}
|
|
944
|
-
}
|
|
835
|
+
await filterFileWorker(dir, ignoreFiles);
|
|
945
836
|
}
|
|
946
837
|
}
|
|
947
838
|
};
|
|
@@ -1019,7 +910,7 @@ var init_fs = __esm({
|
|
|
1019
910
|
]);
|
|
1020
911
|
return componentsExists && tailoredExists;
|
|
1021
912
|
};
|
|
1022
|
-
scanFileFindChart = async (maxDepth =
|
|
913
|
+
scanFileFindChart = async (maxDepth = 10) => {
|
|
1023
914
|
try {
|
|
1024
915
|
const gitHit = await detectChartModuleByGit();
|
|
1025
916
|
if (gitHit) {
|
|
@@ -1027,18 +918,14 @@ var init_fs = __esm({
|
|
|
1027
918
|
}
|
|
1028
919
|
} catch {
|
|
1029
920
|
}
|
|
921
|
+
let dir = process.cwd();
|
|
1030
922
|
for (let i = 0; i < maxDepth; i++) {
|
|
1031
|
-
|
|
1032
|
-
if (i > 0) {
|
|
1033
|
-
relativePath += "../".repeat(i);
|
|
1034
|
-
}
|
|
1035
|
-
const cwd = path4.resolve(process.cwd(), relativePath);
|
|
1036
|
-
const packageJsonPath = path4.resolve(cwd, "package.json");
|
|
923
|
+
const packageJsonPath = path4.join(dir, "package.json");
|
|
1037
924
|
if (await fs4.pathExists(packageJsonPath)) {
|
|
1038
925
|
try {
|
|
1039
926
|
const pkg = await fs4.readJson(packageJsonPath);
|
|
1040
|
-
if (await isChartModuleRoot(
|
|
1041
|
-
return { root:
|
|
927
|
+
if (await isChartModuleRoot(dir, pkg.name)) {
|
|
928
|
+
return { root: dir };
|
|
1042
929
|
}
|
|
1043
930
|
} catch (error) {
|
|
1044
931
|
if (process.env.DEBUG === "true") {
|
|
@@ -1049,6 +936,10 @@ var init_fs = __esm({
|
|
|
1049
936
|
}
|
|
1050
937
|
}
|
|
1051
938
|
}
|
|
939
|
+
if (dir === path4.parse(dir).root) {
|
|
940
|
+
break;
|
|
941
|
+
}
|
|
942
|
+
dir = path4.dirname(dir);
|
|
1052
943
|
}
|
|
1053
944
|
return false;
|
|
1054
945
|
};
|
|
@@ -1103,7 +994,7 @@ __export(utils_exports, {
|
|
|
1103
994
|
getPath: () => getPath,
|
|
1104
995
|
getPrivateSource: () => getPrivateSource,
|
|
1105
996
|
get_cli_config: () => get_cli_config,
|
|
1106
|
-
get_plugin_latest_version: () =>
|
|
997
|
+
get_plugin_latest_version: () => get_plugin_latest_version,
|
|
1107
998
|
get_update_log: () => get_update_log,
|
|
1108
999
|
groupPrompts: () => groupPrompts,
|
|
1109
1000
|
handleCancel: () => handleCancel,
|
|
@@ -1137,6 +1028,7 @@ __export(utils_exports, {
|
|
|
1137
1028
|
wrapAsyncOperation: () => wrapAsyncOperation
|
|
1138
1029
|
});
|
|
1139
1030
|
import * as p from "@clack/prompts";
|
|
1031
|
+
import pc2 from "picocolors";
|
|
1140
1032
|
async function textPrompt(options) {
|
|
1141
1033
|
return promptUntilValid("text", options);
|
|
1142
1034
|
}
|
|
@@ -1226,7 +1118,7 @@ async function progress(items, handler, options) {
|
|
|
1226
1118
|
}
|
|
1227
1119
|
}
|
|
1228
1120
|
}
|
|
1229
|
-
var
|
|
1121
|
+
var spinner2, intro2, outro2, note2, handleCancel, normalizeValidationResult, validatePromptValue, promptUntilValid, promptHandlers, checkUpdate;
|
|
1230
1122
|
var init_utils = __esm({
|
|
1231
1123
|
"src/utils/index.ts"() {
|
|
1232
1124
|
"use strict";
|
|
@@ -1236,7 +1128,6 @@ var init_utils = __esm({
|
|
|
1236
1128
|
init_error();
|
|
1237
1129
|
init_fs();
|
|
1238
1130
|
init_log();
|
|
1239
|
-
import_picocolors2 = __toESM(require_picocolors(), 1);
|
|
1240
1131
|
init_api();
|
|
1241
1132
|
init_config();
|
|
1242
1133
|
init_log();
|
|
@@ -1253,9 +1144,9 @@ var init_utils = __esm({
|
|
|
1253
1144
|
message: (msg) => s.message(msg)
|
|
1254
1145
|
};
|
|
1255
1146
|
};
|
|
1256
|
-
intro2 = (title) => p.intro(
|
|
1147
|
+
intro2 = (title) => p.intro(pc2.bgCyan(pc2.black(` ${title} `)));
|
|
1257
1148
|
outro2 = (message) => {
|
|
1258
|
-
if (message) p.outro(
|
|
1149
|
+
if (message) p.outro(pc2.green(message));
|
|
1259
1150
|
else p.outro();
|
|
1260
1151
|
};
|
|
1261
1152
|
note2 = (message, title) => p.note(message, title);
|
|
@@ -1536,7 +1427,7 @@ async function getStandaloneDependencyVersion(packageName, defaultVersion, shoul
|
|
|
1536
1427
|
[packageName]: `^${defaultVersion}`
|
|
1537
1428
|
};
|
|
1538
1429
|
}
|
|
1539
|
-
return
|
|
1430
|
+
return get_plugin_latest_version(packageName, defaultVersion);
|
|
1540
1431
|
}
|
|
1541
1432
|
async function handleChartTemplate(options) {
|
|
1542
1433
|
const { projectName, projectPath, chartModule, author, chartType, chartId, isTs } = options;
|
|
@@ -1712,6 +1603,7 @@ import { fileURLToPath } from "node:url";
|
|
|
1712
1603
|
import clear from "clear";
|
|
1713
1604
|
import { $ as $3 } from "execa";
|
|
1714
1605
|
import fs6 from "fs-extra";
|
|
1606
|
+
import pc3 from "picocolors";
|
|
1715
1607
|
async function resolveTemplatePath(templateName, baseDir = __dirname) {
|
|
1716
1608
|
const candidates = Array.from(new Set(getTemplatePathCandidates(templateName, baseDir)));
|
|
1717
1609
|
for (const candidate of candidates) {
|
|
@@ -1824,19 +1716,18 @@ async function create(commandList = []) {
|
|
|
1824
1716
|
installSpinner.stop();
|
|
1825
1717
|
clear();
|
|
1826
1718
|
await welcomeCli();
|
|
1827
|
-
log.message(
|
|
1719
|
+
log.message(pc3.cyan("\n\u5B8C\u6210. \u73B0\u5728\u53EF\u4EE5\u6267\u884C:\n"));
|
|
1828
1720
|
const cdPath = getCdRelativePath(process.cwd(), projectPath);
|
|
1829
1721
|
log.success(` cd ${cdPath}`);
|
|
1830
1722
|
log.success(` pnpm dev`);
|
|
1831
1723
|
log.message("");
|
|
1832
1724
|
clearScanCache();
|
|
1833
|
-
outro2(
|
|
1725
|
+
outro2(pc3.green(`\u56FE\u8868 "${projectName}" \u521B\u5EFA\u6210\u529F!`));
|
|
1834
1726
|
}
|
|
1835
|
-
var
|
|
1727
|
+
var __filename, __dirname, getTemplatePathCandidates, CHART_TYPES;
|
|
1836
1728
|
var init_create = __esm({
|
|
1837
1729
|
"src/create/index.ts"() {
|
|
1838
1730
|
"use strict";
|
|
1839
|
-
import_picocolors3 = __toESM(require_picocolors(), 1);
|
|
1840
1731
|
init_schemas();
|
|
1841
1732
|
init_utils();
|
|
1842
1733
|
init_chart();
|
|
@@ -1881,7 +1772,6 @@ async function dev() {
|
|
|
1881
1772
|
const packageJsonPath = join(cwd, "package.json");
|
|
1882
1773
|
if (!await fs7.pathExists(packageJsonPath)) {
|
|
1883
1774
|
exit("\u672A\u627E\u5230 package.json \u6587\u4EF6\uFF0C\u8BF7\u786E\u4FDD\u5728\u9879\u76EE\u6839\u76EE\u5F55\u6267\u884C\u6B64\u547D\u4EE4");
|
|
1884
|
-
return;
|
|
1885
1775
|
}
|
|
1886
1776
|
let packageJson;
|
|
1887
1777
|
try {
|
|
@@ -1893,7 +1783,6 @@ async function dev() {
|
|
|
1893
1783
|
if (!packageJson.scripts?.dev) {
|
|
1894
1784
|
log.info('\u793A\u4F8B\uFF1A{"scripts": {"dev": "vite"}}');
|
|
1895
1785
|
exit("package.json \u4E2D\u672A\u5B9A\u4E49 dev \u811A\u672C\uFF0C\u8BF7\u5148\u6DFB\u52A0 dev \u811A\u672C");
|
|
1896
|
-
return;
|
|
1897
1786
|
}
|
|
1898
1787
|
log.info(`\u6B63\u5728\u6267\u884C dev \u811A\u672C\uFF1A${packageJson.scripts.dev}`);
|
|
1899
1788
|
let interrupted = false;
|