@linyjs/cli 0.0.2

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 ADDED
@@ -0,0 +1,596 @@
1
+ # @linyjs/cli - Ling 框架命令行工具
2
+
3
+ ## 📦 简介
4
+
5
+ `@linyjs/cli` 是 Ling 框架的官方命令行工具,提供**零配置**的插件打包功能。
6
+
7
+ **核心理念:**
8
+ - ✅ **零配置** - 无需配置 webpack、rollup 等构建工具
9
+ - ✅ **智能构建** - CLI 自动处理所有构建细节
10
+ - ✅ **开箱即用** - 只需编写 TypeScript/TSX 代码即可打包
11
+ - ✅ **优化默认值** - 内置 esbuild,自动 bundle、minify、tree shaking
12
+
13
+ ---
14
+
15
+ ## 🚀 快速开始
16
+
17
+ ### 安装
18
+
19
+ ```bash
20
+ # 全局安装(推荐)
21
+ npm install -g @linyjs/cli
22
+
23
+ # 或在项目中使用
24
+ npx @linyjs/cli <command>
25
+ ```
26
+
27
+ ### 基本用法
28
+
29
+ ```bash
30
+ # 查看帮助
31
+ npx @linyjs/cli
32
+
33
+ # 创建新插件项目
34
+ npx @linyjs/cli init my-plugin
35
+
36
+ # 打包插件
37
+ cd my-plugin
38
+ npx @linyjs/cli pack
39
+
40
+ # 开发模式(打包 + 安装 + 注册)
41
+ npx @linyjs/cli dev
42
+
43
+ # 验证插件
44
+ npx @linyjs/cli validate my-plugin.mpk
45
+ ```
46
+
47
+ ---
48
+
49
+ ## 📖 命令参考
50
+
51
+ ### `pack` - 打包插件
52
+
53
+ 将插件项目打包为 `.mpk` 文件。
54
+
55
+ #### 用法
56
+
57
+ ```bash
58
+ npx @linyjs/cli pack [options]
59
+ ```
60
+
61
+ #### 选项
62
+
63
+ | 选项 | 简写 | 类型 | 默认值 | 说明 |
64
+ |------|------|------|--------|------|
65
+ | `--output` | `-o` | string | `.` | 输出目录 |
66
+ | `--name` | `-n` | string | - | 插件名称(覆盖 package.json) |
67
+ | `--version` | `-v` | string | - | 版本号(覆盖 package.json) |
68
+ | `--build` | - | boolean | true | 执行构建步骤(使用 `--no-build` 跳过) |
69
+ | `--manifest` | - | string | - | 自定义 manifest.json 路径 |
70
+ | `--verbose` | - | boolean | false | 显示详细日志 |
71
+
72
+ #### 示例
73
+
74
+ ```bash
75
+ # 基本用法
76
+ npx @linyjs/cli pack
77
+
78
+ # 指定输出目录
79
+ npx @linyjs/cli pack -o ./releases
80
+
81
+ # 跳过构建(已有 dist/)
82
+ npx @linyjs/cli pack --no-build
83
+
84
+ # 详细模式
85
+ npx @linyjs/cli pack --verbose
86
+
87
+ # 自定义版本
88
+ npx @linyjs/cli pack -v 1.0.0
89
+ ```
90
+
91
+ #### 工作流程
92
+
93
+ ```
94
+ 1. 读取 package.json
95
+ 2. 执行构建(npm run build)
96
+ 3. 生成 manifest.json
97
+ 4. 验证插件结构
98
+ 5. 打包为 .mpk 文件
99
+ 6. 显示结果统计
100
+ ```
101
+
102
+ ---
103
+
104
+ ### `dev` - 开发模式 ⭐
105
+
106
+ 快速开发工作流:打包插件 → 安装到 extensions → 注册到 packages.json
107
+
108
+ #### 用法
109
+
110
+ ```bash
111
+ npx @linyjs/cli dev [options]
112
+ ```
113
+
114
+ #### 选项
115
+
116
+ | 选项 | 简写 | 类型 | 默认值 | 说明 |
117
+ |------|------|------|--------|------|
118
+ | `--target` | `-t` | string | 自动检测 | extensions 目录路径 |
119
+ | `--verbose` | - | boolean | false | 显示详细日志 |
120
+
121
+ #### 工作流程
122
+
123
+ ```
124
+ 1. 打包插件(生成 .mpk)
125
+ 2. 解压到 extensions/<plugin-name>/
126
+ 3. 读取 manifest.json
127
+ 4. 更新 packages.json
128
+ 5. 清理临时文件
129
+ ```
130
+
131
+ #### 示例
132
+
133
+ ```bash
134
+ # 基本用法(自动检测 extensions 目录)
135
+ npx @linyjs/cli dev
136
+
137
+ # 指定目标目录
138
+ npx @linyjs/cli dev --target /path/to/ling/packages/ssr/extensions
139
+
140
+ # 详细模式
141
+ npx @linyjs/cli dev --verbose
142
+ ```
143
+
144
+ #### 输出示例
145
+
146
+ ```
147
+ 🚀 Ling Plugin Dev Mode
148
+
149
+ ✔ Packing plugin...
150
+ ✔ Plugin packed: my-plugin-1.0.0.mpk
151
+ ✔ Installing to extensions...
152
+ ✔ Installed to: /path/to/extensions/my-plugin
153
+ ✔ Registering plugin...
154
+ ✔ Plugin registered in packages.json
155
+
156
+ ✓ Development setup complete!
157
+
158
+ Plugin installed:
159
+ Name: my-plugin
160
+ Path: /path/to/extensions/my-plugin
161
+ Status: enabled
162
+
163
+ Next steps:
164
+ 1. Restart SSR server:
165
+ cd packages/ssr && npx tsx src/demo/dev-server-with-pkg.tsx
166
+ 2. Or use hot reload (if supported)
167
+ 3. Test your plugin in the browser
168
+ ```
169
+
170
+ #### 优势
171
+
172
+ ✅ **一键部署** - 无需手动复制文件
173
+ ✅ **自动注册** - 自动更新 packages.json
174
+ ✅ **智能检测** - 自动查找 extensions 目录
175
+ ✅ **增量更新** - 覆盖旧版本,保留配置
176
+ ✅ **清理临时文件** - 不留下垃圾文件
177
+
178
+ ---
179
+
180
+ ### `init` - 创建项目 ⭐
181
+
182
+ 从 npm 下载模板,快速创建新的插件项目。
183
+
184
+ #### 用法
185
+
186
+ ```bash
187
+ npx @linyjs/cli init [name]
188
+ ```
189
+
190
+ #### 参数
191
+
192
+ - `name` - 项目名称(默认:`my-plugin`)
193
+
194
+ #### 示例
195
+
196
+ ```bash
197
+ # 创建名为 my-blog 的插件项目
198
+ npx @linyjs/cli init my-blog
199
+
200
+ # 使用默认名称
201
+ npx @linyjs/cli init
202
+ ```
203
+
204
+ #### 工作流程
205
+
206
+ ```
207
+ 1. 从 npm 下载 @linyjs/plugin-templates
208
+ 2. 创建项目目录
209
+ 3. 复制模板文件
210
+ 4. 显示下一步操作指南
211
+ ```
212
+
213
+ #### 输出示例
214
+
215
+ ```
216
+ 🚀 Ling Plugin Project Creator
217
+
218
+ ✔ Downloading template from npm...
219
+ ✔ Template downloaded
220
+
221
+ ✓ Project created successfully!
222
+
223
+ Next steps:
224
+ 1. Navigate to your project:
225
+ cd my-plugin
226
+ 2. Install dependencies:
227
+ npm install
228
+ 3. Start development:
229
+ npm run dev
230
+ 4. Pack for deployment:
231
+ npx @linyjs/cli pack
232
+
233
+ Learn more:
234
+ - Plugin Development Guide: ...
235
+ - CLI Documentation: ...
236
+ ```
237
+
238
+ #### 模板内容
239
+
240
+ 创建的插件项目包含:
241
+
242
+ ```
243
+ my-plugin/
244
+ ├── package.json # 预配置的依赖和脚本
245
+ ├── tsconfig.json # TypeScript 配置
246
+ ├── README.md # 项目说明
247
+ ├── .gitignore # Git 忽略文件
248
+ └── src/
249
+ ├── server/
250
+ │ └── index.ts # 服务端模块示例
251
+ └── client/
252
+ └── index.tsx # 客户端模块示例
253
+ ```
254
+
255
+ **特性:**
256
+ - ✅ TypeScript 支持
257
+ - ✅ React 19 支持
258
+ - ✅ 零配置构建(使用 `@linyjs/cli`)
259
+ - ✅ 示例代码和注释
260
+ - ✅ 开箱即用
261
+
262
+ ---
263
+
264
+ ### `validate` - 验证插件
265
+
266
+ 验证 `.mpk` 文件或插件目录是否符合规范。
267
+
268
+ #### 用法
269
+
270
+ ```bash
271
+ npx @linyjs/cli validate <path> [options]
272
+ ```
273
+
274
+ #### 参数
275
+
276
+ - `path` - 插件路径(.mpk 文件或目录)
277
+
278
+ #### 选项
279
+
280
+ | 选项 | 简写 | 类型 | 默认值 | 说明 |
281
+ |------|------|------|--------|------|
282
+ | `--strict` | - | boolean | false | 严格模式(警告也报错) |
283
+ | `--json` | - | boolean | false | JSON 格式输出 |
284
+
285
+ #### 示例
286
+
287
+ ```bash
288
+ # 验证目录
289
+ npx @linyjs/cli validate ./my-plugin
290
+
291
+ # 验证 .mpk 文件
292
+ npx @linyjs/cli validate my-plugin.mpk
293
+
294
+ # JSON 输出
295
+ npx @linyjs/cli validate my-plugin.mpk --json
296
+ ```
297
+
298
+ ---
299
+
300
+ ### `init` - 初始化项目
301
+
302
+ 快速创建新的插件项目模板。
303
+
304
+ #### 用法
305
+
306
+ ```bash
307
+ npx @linyjs/cli init [name] [options]
308
+ ```
309
+
310
+ #### 参数
311
+
312
+ - `name` - 项目名称(可选)
313
+
314
+ #### 选项
315
+
316
+ | 选项 | 简写 | 类型 | 默认值 | 说明 |
317
+ |------|------|------|--------|------|
318
+ | `--template` | `-t` | string | `minimal` | 项目模板 |
319
+ | `--yes` | `-y` | boolean | false | 跳过确认 |
320
+
321
+ #### 可用模板
322
+
323
+ - `minimal` - 最小化插件(Hello World)
324
+ - `full` - 完整功能插件
325
+ - `admin-extension` - 管理后台扩展
326
+ - `api-service` - 纯 API 服务
327
+
328
+ #### 示例
329
+
330
+ ```bash
331
+ # 交互式创建
332
+ npx @linyjs/cli init
333
+
334
+ # 指定名称和模板
335
+ npx @linyjs/cli init my-blog --template=full
336
+
337
+ # 非交互模式
338
+ npx @linyjs/cli init my-plugin -t minimal -y
339
+ ```
340
+
341
+ ---
342
+
343
+ ## 💡 使用场景
344
+
345
+ ### 1. 本地开发
346
+
347
+ #### 方式 A:使用 dev 命令(推荐)⭐
348
+
349
+ ```bash
350
+ # 在插件项目中
351
+ cd my-plugin
352
+
353
+ # 一键打包、安装、注册
354
+ npx @linyjs/cli dev
355
+
356
+ # 重启 SSR 服务器即可看到效果
357
+ cd ../ssr && npx tsx src/demo/dev-server-with-pkg.tsx
358
+ ```
359
+
360
+ **优势:**
361
+ - ✅ 自动打包
362
+ - ✅ 自动复制到 extensions
363
+ - ✅ 自动注册到 packages.json
364
+ - ✅ 清理临时文件
365
+
366
+ #### 方式 B:手动流程
367
+
368
+ ```bash
369
+ # 在插件项目中
370
+ cd my-plugin
371
+
372
+ # 打包并测试
373
+ npx @linyjs/cli pack
374
+
375
+ # 复制到 extensions 目录
376
+ cp my-plugin-1.0.0.mpk ../ssr/extensions/
377
+
378
+ # 重启 SSR 服务器
379
+ cd ../ssr && npx tsx src/demo/dev-server-with-pkg.tsx
380
+ ```
381
+
382
+ ### 2. CI/CD 集成
383
+
384
+ ```yaml
385
+ # .github/workflows/build.yml
386
+ name: Build Plugin
387
+
388
+ on:
389
+ push:
390
+ tags:
391
+ - 'v*'
392
+
393
+ jobs:
394
+ build:
395
+ runs-on: ubuntu-latest
396
+
397
+ steps:
398
+ - uses: actions/checkout@v3
399
+
400
+ - name: Setup Node.js
401
+ uses: actions/setup-node@v3
402
+ with:
403
+ node-version: '18'
404
+
405
+ - name: Install dependencies
406
+ run: npm ci
407
+
408
+ - name: Pack plugin
409
+ run: npx @linyjs/cli pack --output ./dist
410
+
411
+ - name: Upload artifact
412
+ uses: actions/upload-artifact@v3
413
+ with:
414
+ name: plugin
415
+ path: ./dist/*.mpk
416
+ ```
417
+
418
+ ### 3. 批量处理
419
+
420
+ ```bash
421
+ # 打包多个插件
422
+ for dir in plugins/*/; do
423
+ cd "$dir"
424
+ npx @linyjs/cli pack -o ../../releases/
425
+ cd ../..
426
+ done
427
+ ```
428
+
429
+ ---
430
+
431
+ ## 🔧 配置
432
+
433
+ ### `.lingrc.json`
434
+
435
+ 可以在项目根目录创建 `.lingrc.json` 配置文件:
436
+
437
+ ```json
438
+ {
439
+ "build": {
440
+ "command": "npm run build",
441
+ "outputDir": "dist"
442
+ },
443
+ "pack": {
444
+ "exclude": [
445
+ "node_modules",
446
+ ".git",
447
+ "*.test.ts",
448
+ "*.spec.ts"
449
+ ],
450
+ "include": [
451
+ "**/*"
452
+ ]
453
+ },
454
+ "manifest": {
455
+ "customFields": {
456
+ "homepage": "https://example.com"
457
+ }
458
+ }
459
+ }
460
+ ```
461
+
462
+ ---
463
+
464
+ ## 🎨 输出示例
465
+
466
+ ### 成功打包
467
+
468
+ ```
469
+ 📦 Ling Plugin Packer
470
+
471
+ ✔ Package.json loaded
472
+ ✔ Build completed
473
+ ✔ Manifest generated
474
+ ✔ Structure validated
475
+ ✔ Plugin packed successfully
476
+
477
+ ✓ Plugin ready!
478
+ File: /path/to/my-plugin-1.0.0.mpk
479
+ Size: 245.67 KB
480
+ Version: 1.0.0
481
+
482
+ Next steps:
483
+ 1. Test the plugin:
484
+ cp /path/to/my-plugin-1.0.0.mpk /path/to/ling/packages/ssr/extensions/
485
+ 2. Restart SSR server:
486
+ cd packages/ssr && npx tsx src/demo/dev-server-with-pkg.tsx
487
+ 3. Validate the plugin:
488
+ npx @linyjs/cli validate /path/to/my-plugin-1.0.0.mpk
489
+ ```
490
+
491
+ ### 验证失败
492
+
493
+ ```
494
+ 📦 Ling Plugin Packer
495
+
496
+ ✔ Package.json loaded
497
+ ✔ Build completed
498
+ ✔ Manifest generated
499
+ ✗ Validation failed
500
+
501
+ Validation errors:
502
+ - Server entry not found: server/index.js
503
+ - Client entry not found: client/index.js
504
+ ```
505
+
506
+ ---
507
+
508
+ ## 🛠️ 技术栈
509
+
510
+ - **[Cleye](https://github.com/zthh/cleye)** - 现代化 CLI 框架
511
+ - **[Archiver](https://github.com/archiverjs/node-archiver)** - ZIP 压缩
512
+ - **[Chalk](https://github.com/chalk/chalk)** - 终端着色
513
+ - **[Ora](https://github.com/sindresorhus/ora)** - 加载动画
514
+ - **[FS Extra](https://github.com/jprichardson/node-fs-extra)** - 文件系统操作
515
+
516
+ ---
517
+
518
+ ## 📝 开发指南
519
+
520
+ ### 本地开发
521
+
522
+ ```bash
523
+ # 克隆仓库
524
+ git clone https://github.com/linyjs/ling.git
525
+ cd ling/packages/cli
526
+
527
+ # 安装依赖
528
+ npm install
529
+
530
+ # 构建
531
+ npm run build
532
+
533
+ # 测试
534
+ node dist/index.js pack --help
535
+ ```
536
+
537
+ ### 添加新命令
538
+
539
+ 1. 在 `src/commands/` 目录下创建新文件
540
+ 2. 实现命令逻辑
541
+ 3. 在 `src/index.ts` 中注册命令
542
+
543
+ ---
544
+
545
+ ## ❓ 常见问题
546
+
547
+ ### Q: 如何使用 dev 命令快速开发?
548
+
549
+ ```bash
550
+ # 在插件项目目录中
551
+ cd my-plugin
552
+
553
+ # 一键打包、安装、注册
554
+ npx @linyjs/cli dev
555
+
556
+ # 如果自动检测失败,指定目标目录
557
+ npx @linyjs/cli dev --target /path/to/ling/packages/ssr/extensions
558
+ ```
559
+
560
+ 详见:[`dev` - 开发模式](#dev---开发模式-)
561
+
562
+ ### Q: 如何跳过构建步骤?
563
+
564
+ ```bash
565
+ npx @linyjs/cli pack --no-build
566
+ ```
567
+
568
+ ### Q: 如何指定输出目录?
569
+
570
+ ```bash
571
+ npx @linyjs/cli pack -o ./releases
572
+ ```
573
+
574
+ ### Q: 打包后文件在哪里?
575
+
576
+ 默认在当前目录,文件名格式为 `{name}-{version}.mpk`。
577
+
578
+ ### Q: 如何验证插件?
579
+
580
+ ```bash
581
+ npx @linyjs/cli validate my-plugin.mpk
582
+ ```
583
+
584
+ ---
585
+
586
+ ## 📄 License
587
+
588
+ MIT
589
+
590
+ ---
591
+
592
+ ## 🔗 相关链接
593
+
594
+ - [Ling 框架文档](https://github.com/linyjs/ling)
595
+ - [插件开发指南](../../spec/插件开发指南.md)
596
+ - [问题反馈](https://github.com/linyjs/ling/issues)