@lppx/nlearn 1.1.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.
Files changed (19) hide show
  1. package/dist/scripts/sync-repo.js +100 -0
  2. package/dist/src/cli/cli.js +9 -0
  3. package/dist/src/demo/commander/01-/345/237/272/347/241/200/346/246/202/345/277/265.js +174 -0
  4. package/dist/src/demo/commander/02-/345/221/275/344/273/244/347/263/273/347/273/237.js +260 -0
  5. package/dist/src/demo/commander/03-/351/253/230/347/272/247/347/211/271/346/200/247.js +285 -0
  6. package/dist/src/demo/commander/04-/345/256/236/346/210/230/346/241/210/344/276/213.js +408 -0
  7. package/dist/src/demo/esm/01-/345/237/272/347/241/200/346/246/202/345/277/265.js +226 -0
  8. package/dist/src/demo/esm/02-/345/257/274/345/207/272/350/257/255/346/263/225.js +281 -0
  9. package/dist/src/demo/esm/03-/345/257/274/345/205/245/350/257/255/346/263/225.js +366 -0
  10. package/dist/src/demo/esm/04-/345/256/236/346/210/230/346/241/210/344/276/213.js +509 -0
  11. package/dist/src/demo/inquirer/01-/345/237/272/347/241/200/346/246/202/345/277/265.js +135 -0
  12. package/dist/src/demo/inquirer/02-/351/200/211/346/213/251/347/261/273/345/236/213.js +143 -0
  13. package/dist/src/demo/inquirer/03-/351/253/230/347/272/247/347/211/271/346/200/247.js +211 -0
  14. package/dist/src/demo/inquirer/04-/345/256/236/346/210/230/346/241/210/344/276/213.js +343 -0
  15. package/dist/src/demo/yargs/01-/345/237/272/347/241/200/346/246/202/345/277/265.js +142 -0
  16. package/dist/src/demo/yargs/02-/345/221/275/344/273/244/347/263/273/347/273/237.js +211 -0
  17. package/dist/src/demo/yargs/03-/351/253/230/347/272/247/347/211/271/346/200/247.js +205 -0
  18. package/dist/src/demo/yargs/04-/345/256/236/346/210/230/346/241/210/344/276/213.js +276 -0
  19. package/package.json +39 -0
@@ -0,0 +1,509 @@
1
+ "use strict";
2
+ /**
3
+ * ESM 实战案例
4
+ * ============
5
+ * 本文件通过实际案例展示 ESM 的应用场景
6
+ * 包括模块组织、代码分割、插件系统等
7
+ */
8
+ // #region 示例1: 工具函数库的模块化组织
9
+ /**
10
+ * 案例:创建一个工具函数库,使用 ESM 进行模块化组织
11
+ */
12
+ function demonstrateUtilsLibrary() {
13
+ console.log('=== 案例1: 工具函数库的模块化组织 ===\n');
14
+ console.log('项目结构:');
15
+ console.log('utils/');
16
+ console.log(' ├── string/');
17
+ console.log(' │ ├── capitalize.js');
18
+ console.log(' │ ├── trim.js');
19
+ console.log(' │ └── index.js');
20
+ console.log(' ├── array/');
21
+ console.log(' │ ├── unique.js');
22
+ console.log(' │ ├── flatten.js');
23
+ console.log(' │ └── index.js');
24
+ console.log(' └── index.js\n');
25
+ console.log('实现代码:');
26
+ console.log('---');
27
+ console.log('// string/capitalize.js');
28
+ console.log('export function capitalize(str) {');
29
+ console.log(' return str.charAt(0).toUpperCase() + str.slice(1);');
30
+ console.log('}\n');
31
+ console.log('// string/trim.js');
32
+ console.log('export function trim(str) {');
33
+ console.log(' return str.trim();');
34
+ console.log('}\n');
35
+ console.log('// string/index.js (聚合导出)');
36
+ console.log('export { capitalize } from "./capitalize.js";');
37
+ console.log('export { trim } from "./trim.js";\n');
38
+ console.log('// array/unique.js');
39
+ console.log('export function unique(arr) {');
40
+ console.log(' return [...new Set(arr)];');
41
+ console.log('}\n');
42
+ console.log('// array/flatten.js');
43
+ console.log('export function flatten(arr) {');
44
+ console.log(' return arr.flat(Infinity);');
45
+ console.log('}\n');
46
+ console.log('// array/index.js (聚合导出)');
47
+ console.log('export { unique } from "./unique.js";');
48
+ console.log('export { flatten } from "./flatten.js";\n');
49
+ console.log('// utils/index.js (总入口)');
50
+ console.log('export * as string from "./string/index.js";');
51
+ console.log('export * as array from "./array/index.js";\n');
52
+ console.log('// 或者扁平化导出');
53
+ console.log('export * from "./string/index.js";');
54
+ console.log('export * from "./array/index.js";');
55
+ console.log('---\n');
56
+ console.log('使用方式:');
57
+ console.log('---');
58
+ console.log('// 方式1: 命名空间导入');
59
+ console.log('import { string, array } from "./utils/index.js";');
60
+ console.log('console.log(string.capitalize("hello"));');
61
+ console.log('console.log(array.unique([1, 2, 2, 3]));\n');
62
+ console.log('// 方式2: 扁平化导入');
63
+ console.log('import { capitalize, unique } from "./utils/index.js";');
64
+ console.log('console.log(capitalize("hello"));');
65
+ console.log('console.log(unique([1, 2, 2, 3]));');
66
+ console.log('---\n');
67
+ console.log('优势:');
68
+ console.log(' ✓ 清晰的目录结构');
69
+ console.log(' ✓ 按功能分类组织');
70
+ console.log(' ✓ 支持按需导入(Tree Shaking)');
71
+ console.log(' ✓ 易于维护和扩展\n');
72
+ }
73
+ // #endregion
74
+ // #region 示例2: 配置管理系统
75
+ /**
76
+ * 案例:使用 ESM 实现灵活的配置管理系统
77
+ */
78
+ function demonstrateConfigSystem() {
79
+ console.log('=== 案例2: 配置管理系统 ===\n');
80
+ console.log('项目结构:');
81
+ console.log('config/');
82
+ console.log(' ├── base.js (基础配置)');
83
+ console.log(' ├── development.js (开发环境)');
84
+ console.log(' ├── production.js (生产环境)');
85
+ console.log(' └── index.js (配置入口)\n');
86
+ console.log('实现代码:');
87
+ console.log('---');
88
+ console.log('// config/base.js');
89
+ console.log('export default {');
90
+ console.log(' app: {');
91
+ console.log(' name: "MyApp",');
92
+ console.log(' version: "1.0.0"');
93
+ console.log(' },');
94
+ console.log(' server: {');
95
+ console.log(' port: 3000,');
96
+ console.log(' host: "localhost"');
97
+ console.log(' }');
98
+ console.log('};\n');
99
+ console.log('// config/development.js');
100
+ console.log('import base from "./base.js";');
101
+ console.log('');
102
+ console.log('export default {');
103
+ console.log(' ...base,');
104
+ console.log(' debug: true,');
105
+ console.log(' server: {');
106
+ console.log(' ...base.server,');
107
+ console.log(' port: 3001 // 覆盖端口');
108
+ console.log(' }');
109
+ console.log('};\n');
110
+ console.log('// config/production.js');
111
+ console.log('import base from "./base.js";');
112
+ console.log('');
113
+ console.log('export default {');
114
+ console.log(' ...base,');
115
+ console.log(' debug: false,');
116
+ console.log(' server: {');
117
+ console.log(' ...base.server,');
118
+ console.log(' host: "0.0.0.0"');
119
+ console.log(' }');
120
+ console.log('};\n');
121
+ console.log('// config/index.js');
122
+ console.log('const env = process.env.NODE_ENV || "development";');
123
+ console.log('');
124
+ console.log('let config;');
125
+ console.log('switch (env) {');
126
+ console.log(' case "production":');
127
+ console.log(' config = await import("./production.js");');
128
+ console.log(' break;');
129
+ console.log(' case "development":');
130
+ console.log(' default:');
131
+ console.log(' config = await import("./development.js");');
132
+ console.log('}');
133
+ console.log('');
134
+ console.log('export default config.default;');
135
+ console.log('---\n');
136
+ console.log('使用方式:');
137
+ console.log('---');
138
+ console.log('import config from "./config/index.js";');
139
+ console.log('');
140
+ console.log('console.log(config.app.name);');
141
+ console.log('console.log(config.server.port);');
142
+ console.log('console.log(config.debug);');
143
+ console.log('---\n');
144
+ console.log('优势:');
145
+ console.log(' ✓ 环境配置分离');
146
+ console.log(' ✓ 配置继承和覆盖');
147
+ console.log(' ✓ 按需加载配置');
148
+ console.log(' ✓ 类型安全(配合 TypeScript)\n');
149
+ }
150
+ // #endregion
151
+ // #region 示例3: 插件系统
152
+ /**
153
+ * 案例:使用动态导入实现插件系统
154
+ */
155
+ async function demonstratePluginSystem() {
156
+ console.log('=== 案例3: 插件系统 ===\n');
157
+ console.log('项目结构:');
158
+ console.log('plugins/');
159
+ console.log(' ├── logger.js');
160
+ console.log(' ├── cache.js');
161
+ console.log(' ├── validator.js');
162
+ console.log(' └── index.js\n');
163
+ console.log('实现代码:');
164
+ console.log('---');
165
+ console.log('// plugins/logger.js');
166
+ console.log('export default {');
167
+ console.log(' name: "logger",');
168
+ console.log(' version: "1.0.0",');
169
+ console.log(' install(app) {');
170
+ console.log(' app.log = (msg) => console.log(`[LOG] ${msg}`);');
171
+ console.log(' }');
172
+ console.log('};\n');
173
+ console.log('// plugins/cache.js');
174
+ console.log('export default {');
175
+ console.log(' name: "cache",');
176
+ console.log(' version: "1.0.0",');
177
+ console.log(' install(app) {');
178
+ console.log(' const cache = new Map();');
179
+ console.log(' app.cache = {');
180
+ console.log(' get: (key) => cache.get(key),');
181
+ console.log(' set: (key, value) => cache.set(key, value)');
182
+ console.log(' };');
183
+ console.log(' }');
184
+ console.log('};\n');
185
+ console.log('// app.js (应用主类)');
186
+ console.log('class App {');
187
+ console.log(' constructor() {');
188
+ console.log(' this.plugins = [];');
189
+ console.log(' }');
190
+ console.log('');
191
+ console.log(' async use(pluginName) {');
192
+ console.log(' // 动态导入插件');
193
+ console.log(' const module = await import(`./plugins/${pluginName}.js`);');
194
+ console.log(' const plugin = module.default;');
195
+ console.log(' ');
196
+ console.log(' // 安装插件');
197
+ console.log(' plugin.install(this);');
198
+ console.log(' this.plugins.push(plugin);');
199
+ console.log(' ');
200
+ console.log(' console.log(`Plugin ${plugin.name} installed`);');
201
+ console.log(' }');
202
+ console.log('}');
203
+ console.log('---\n');
204
+ console.log('使用方式:');
205
+ console.log('---');
206
+ console.log('const app = new App();');
207
+ console.log('');
208
+ console.log('// 按需加载插件');
209
+ console.log('await app.use("logger");');
210
+ console.log('await app.use("cache");');
211
+ console.log('');
212
+ console.log('// 使用插件功能');
213
+ console.log('app.log("Hello World");');
214
+ console.log('app.cache.set("key", "value");');
215
+ console.log('console.log(app.cache.get("key"));');
216
+ console.log('---\n');
217
+ console.log('优势:');
218
+ console.log(' ✓ 按需加载插件');
219
+ console.log(' ✓ 减少初始加载时间');
220
+ console.log(' ✓ 插件独立开发和维护');
221
+ console.log(' ✓ 灵活的插件组合\n');
222
+ }
223
+ // #endregion
224
+ // #region 示例4: 路由懒加载
225
+ /**
226
+ * 案例:Web 应用中的路由懒加载
227
+ */
228
+ function demonstrateLazyRouting() {
229
+ console.log('=== 案例4: 路由懒加载 ===\n');
230
+ console.log('项目结构:');
231
+ console.log('pages/');
232
+ console.log(' ├── home.js');
233
+ console.log(' ├── about.js');
234
+ console.log(' ├── contact.js');
235
+ console.log(' └── admin.js\n');
236
+ console.log('实现代码:');
237
+ console.log('---');
238
+ console.log('// router.js');
239
+ console.log('class Router {');
240
+ console.log(' constructor() {');
241
+ console.log(' this.routes = new Map();');
242
+ console.log(' this.currentPage = null;');
243
+ console.log(' }');
244
+ console.log('');
245
+ console.log(' // 注册路由(懒加载)');
246
+ console.log(' register(path, loader) {');
247
+ console.log(' this.routes.set(path, loader);');
248
+ console.log(' }');
249
+ console.log('');
250
+ console.log(' // 导航到指定路由');
251
+ console.log(' async navigate(path) {');
252
+ console.log(' const loader = this.routes.get(path);');
253
+ console.log(' if (!loader) {');
254
+ console.log(' console.error(`Route ${path} not found`);');
255
+ console.log(' return;');
256
+ console.log(' }');
257
+ console.log('');
258
+ console.log(' // 动态加载页面模块');
259
+ console.log(' console.log(`Loading ${path}...`);');
260
+ console.log(' const module = await loader();');
261
+ console.log(' ');
262
+ console.log(' // 渲染页面');
263
+ console.log(' this.currentPage = module.default;');
264
+ console.log(' this.currentPage.render();');
265
+ console.log(' }');
266
+ console.log('}');
267
+ console.log('');
268
+ console.log('// 创建路由实例');
269
+ console.log('const router = new Router();');
270
+ console.log('');
271
+ console.log('// 注册路由(使用动态导入)');
272
+ console.log('router.register("/", () => import("./pages/home.js"));');
273
+ console.log('router.register("/about", () => import("./pages/about.js"));');
274
+ console.log('router.register("/contact", () => import("./pages/contact.js"));');
275
+ console.log('router.register("/admin", () => import("./pages/admin.js"));');
276
+ console.log('---\n');
277
+ console.log('页面模块示例:');
278
+ console.log('---');
279
+ console.log('// pages/home.js');
280
+ console.log('export default {');
281
+ console.log(' name: "Home",');
282
+ console.log(' render() {');
283
+ console.log(' console.log("Rendering Home Page");');
284
+ console.log(' // 实际渲染逻辑');
285
+ console.log(' }');
286
+ console.log('};');
287
+ console.log('---\n');
288
+ console.log('使用方式:');
289
+ console.log('---');
290
+ console.log('// 导航到首页(只加载 home.js)');
291
+ console.log('await router.navigate("/");');
292
+ console.log('');
293
+ console.log('// 导航到关于页(只加载 about.js)');
294
+ console.log('await router.navigate("/about");');
295
+ console.log('---\n');
296
+ console.log('优势:');
297
+ console.log(' ✓ 减少初始加载体积');
298
+ console.log(' ✓ 提升首屏加载速度');
299
+ console.log(' ✓ 按需加载页面资源');
300
+ console.log(' ✓ 改善用户体验\n');
301
+ }
302
+ // #endregion
303
+ // #region 示例5: 国际化(i18n)系统
304
+ /**
305
+ * 案例:使用动态导入实现国际化
306
+ */
307
+ async function demonstrateI18nSystem() {
308
+ console.log('=== 案例5: 国际化系统 ===\n');
309
+ console.log('项目结构:');
310
+ console.log('locales/');
311
+ console.log(' ├── zh-CN.js');
312
+ console.log(' ├── en-US.js');
313
+ console.log(' ├── ja-JP.js');
314
+ console.log(' └── index.js\n');
315
+ console.log('实现代码:');
316
+ console.log('---');
317
+ console.log('// locales/zh-CN.js');
318
+ console.log('export default {');
319
+ console.log(' common: {');
320
+ console.log(' hello: "你好",');
321
+ console.log(' goodbye: "再见"');
322
+ console.log(' },');
323
+ console.log(' errors: {');
324
+ console.log(' notFound: "未找到"');
325
+ console.log(' }');
326
+ console.log('};\n');
327
+ console.log('// locales/en-US.js');
328
+ console.log('export default {');
329
+ console.log(' common: {');
330
+ console.log(' hello: "Hello",');
331
+ console.log(' goodbye: "Goodbye"');
332
+ console.log(' },');
333
+ console.log(' errors: {');
334
+ console.log(' notFound: "Not Found"');
335
+ console.log(' }');
336
+ console.log('};\n');
337
+ console.log('// i18n.js');
338
+ console.log('class I18n {');
339
+ console.log(' constructor() {');
340
+ console.log(' this.locale = "en-US";');
341
+ console.log(' this.messages = null;');
342
+ console.log(' }');
343
+ console.log('');
344
+ console.log(' async setLocale(locale) {');
345
+ console.log(' this.locale = locale;');
346
+ console.log(' // 动态加载语言包');
347
+ console.log(' const module = await import(`./locales/${locale}.js`);');
348
+ console.log(' this.messages = module.default;');
349
+ console.log(' console.log(`Locale changed to ${locale}`);');
350
+ console.log(' }');
351
+ console.log('');
352
+ console.log(' t(key) {');
353
+ console.log(' const keys = key.split(".");');
354
+ console.log(' let value = this.messages;');
355
+ console.log(' for (const k of keys) {');
356
+ console.log(' value = value?.[k];');
357
+ console.log(' }');
358
+ console.log(' return value || key;');
359
+ console.log(' }');
360
+ console.log('}');
361
+ console.log('---\n');
362
+ console.log('使用方式:');
363
+ console.log('---');
364
+ console.log('const i18n = new I18n();');
365
+ console.log('');
366
+ console.log('// 切换到中文');
367
+ console.log('await i18n.setLocale("zh-CN");');
368
+ console.log('console.log(i18n.t("common.hello")); // "你好"');
369
+ console.log('');
370
+ console.log('// 切换到英文');
371
+ console.log('await i18n.setLocale("en-US");');
372
+ console.log('console.log(i18n.t("common.hello")); // "Hello"');
373
+ console.log('---\n');
374
+ console.log('优势:');
375
+ console.log(' ✓ 按需加载语言包');
376
+ console.log(' ✓ 减少初始加载体积');
377
+ console.log(' ✓ 支持动态切换语言');
378
+ console.log(' ✓ 易于添加新语言\n');
379
+ }
380
+ // #endregion
381
+ // #region 示例6: 微前端架构
382
+ /**
383
+ * 案例:使用 ESM 实现微前端架构
384
+ */
385
+ function demonstrateMicroFrontend() {
386
+ console.log('=== 案例6: 微前端架构 ===\n');
387
+ console.log('项目结构:');
388
+ console.log('micro-apps/');
389
+ console.log(' ├── app-dashboard/');
390
+ console.log(' │ └── index.js');
391
+ console.log(' ├── app-settings/');
392
+ console.log(' │ └── index.js');
393
+ console.log(' └── app-analytics/');
394
+ console.log(' └── index.js\n');
395
+ console.log('实现代码:');
396
+ console.log('---');
397
+ console.log('// micro-apps/app-dashboard/index.js');
398
+ console.log('export default {');
399
+ console.log(' name: "dashboard",');
400
+ console.log(' mount(container) {');
401
+ console.log(' container.innerHTML = "<h1>Dashboard App</h1>";');
402
+ console.log(' console.log("Dashboard mounted");');
403
+ console.log(' },');
404
+ console.log(' unmount(container) {');
405
+ console.log(' container.innerHTML = "";');
406
+ console.log(' console.log("Dashboard unmounted");');
407
+ console.log(' }');
408
+ console.log('};\n');
409
+ console.log('// main-app.js (主应用)');
410
+ console.log('class MicroFrontend {');
411
+ console.log(' constructor() {');
412
+ console.log(' this.apps = new Map();');
413
+ console.log(' this.currentApp = null;');
414
+ console.log(' }');
415
+ console.log('');
416
+ console.log(' async loadApp(appName) {');
417
+ console.log(' // 检查是否已加载');
418
+ console.log(' if (this.apps.has(appName)) {');
419
+ console.log(' return this.apps.get(appName);');
420
+ console.log(' }');
421
+ console.log('');
422
+ console.log(' // 动态加载微应用');
423
+ console.log(' const module = await import(`./micro-apps/${appName}/index.js`);');
424
+ console.log(' const app = module.default;');
425
+ console.log(' this.apps.set(appName, app);');
426
+ console.log(' return app;');
427
+ console.log(' }');
428
+ console.log('');
429
+ console.log(' async mountApp(appName, container) {');
430
+ console.log(' // 卸载当前应用');
431
+ console.log(' if (this.currentApp) {');
432
+ console.log(' this.currentApp.unmount(container);');
433
+ console.log(' }');
434
+ console.log('');
435
+ console.log(' // 加载并挂载新应用');
436
+ console.log(' const app = await this.loadApp(appName);');
437
+ console.log(' app.mount(container);');
438
+ console.log(' this.currentApp = app;');
439
+ console.log(' }');
440
+ console.log('}');
441
+ console.log('---\n');
442
+ console.log('使用方式:');
443
+ console.log('---');
444
+ console.log('const mf = new MicroFrontend();');
445
+ console.log('const container = document.getElementById("app");');
446
+ console.log('');
447
+ console.log('// 加载仪表盘应用');
448
+ console.log('await mf.mountApp("app-dashboard", container);');
449
+ console.log('');
450
+ console.log('// 切换到设置应用');
451
+ console.log('await mf.mountApp("app-settings", container);');
452
+ console.log('---\n');
453
+ console.log('优势:');
454
+ console.log(' ✓ 应用独立开发和部署');
455
+ console.log(' ✓ 按需加载子应用');
456
+ console.log(' ✓ 技术栈独立');
457
+ console.log(' ✓ 团队独立协作\n');
458
+ }
459
+ // #endregion
460
+ // 主函数:根据参数运行指定示例
461
+ if (require.main === module) {
462
+ const args = process.argv.slice(2);
463
+ const exampleNum = args[0] ? parseInt(args[0]) : 0;
464
+ const examples = [
465
+ { name: '所有示例', fn: runAllExamples },
466
+ { name: '工具函数库的模块化组织', fn: demonstrateUtilsLibrary },
467
+ { name: '配置管理系统', fn: demonstrateConfigSystem },
468
+ { name: '插件系统', fn: demonstratePluginSystem },
469
+ { name: '路由懒加载', fn: demonstrateLazyRouting },
470
+ { name: '国际化系统', fn: demonstrateI18nSystem },
471
+ { name: '微前端架构', fn: demonstrateMicroFrontend }
472
+ ];
473
+ if (exampleNum === 0) {
474
+ runAllExamples();
475
+ }
476
+ else if (exampleNum > 0 && exampleNum < examples.length) {
477
+ console.log(`\n运行示例 ${exampleNum}: ${examples[exampleNum].name}\n`);
478
+ console.log('='.repeat(50));
479
+ const fn = examples[exampleNum].fn;
480
+ Promise.resolve(fn()).then(() => {
481
+ console.log('='.repeat(50));
482
+ });
483
+ }
484
+ else {
485
+ console.log(`可用的示例:
486
+ ${examples.slice(1).map((ex, idx) => ` ${idx + 1}. ${ex.name}`).join('\n')}
487
+
488
+ 使用方法: ts-node 04-实战案例.ts [示例编号]`);
489
+ }
490
+ }
491
+ async function runAllExamples() {
492
+ console.log(`
493
+ ${'='.repeat(50)}
494
+ 运行所有示例
495
+ ${'='.repeat(50)}
496
+ `);
497
+ demonstrateUtilsLibrary();
498
+ console.log('\n' + '-'.repeat(50) + '\n');
499
+ demonstrateConfigSystem();
500
+ console.log('\n' + '-'.repeat(50) + '\n');
501
+ await demonstratePluginSystem();
502
+ console.log('\n' + '-'.repeat(50) + '\n');
503
+ demonstrateLazyRouting();
504
+ console.log('\n' + '-'.repeat(50) + '\n');
505
+ await demonstrateI18nSystem();
506
+ console.log('\n' + '-'.repeat(50) + '\n');
507
+ demonstrateMicroFrontend();
508
+ console.log('\n' + '='.repeat(50));
509
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ /**
3
+ * Inquirer.js 基础概念
4
+ * ==================
5
+ * Inquirer.js 是一个用于创建命令行交互式问答的 Node.js 库
6
+ * 适用于构建 CLI 工具、脚手架等需要用户输入的场景
7
+ * 支持 Node.js 14.18.0+
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const inquirer_1 = __importDefault(require("inquirer"));
14
+ // #region 示例1: 简单的文本输入
15
+ async function simpleInput() {
16
+ console.log('\n=== 示例1: 简单的文本输入 ===\n');
17
+ const answers = await inquirer_1.default.prompt([
18
+ {
19
+ type: 'input',
20
+ name: 'username',
21
+ message: '请输入你的用户名:',
22
+ }
23
+ ]);
24
+ console.log(`你好, ${answers.username}!`);
25
+ }
26
+ // #endregion
27
+ // #region 示例2: 带默认值的输入
28
+ async function inputWithDefault() {
29
+ console.log('\n=== 示例2: 带默认值的输入 ===\n');
30
+ const answers = await inquirer_1.default.prompt([
31
+ {
32
+ type: 'input',
33
+ name: 'projectName',
34
+ message: '请输入项目名称:',
35
+ default: 'my-awesome-project',
36
+ }
37
+ ]);
38
+ console.log(`项目名称: ${answers.projectName}`);
39
+ }
40
+ // #endregion
41
+ // #region 示例3: 密码输入
42
+ async function passwordInput() {
43
+ console.log('\n=== 示例3: 密码输入 ===\n');
44
+ const answers = await inquirer_1.default.prompt([
45
+ {
46
+ type: 'password',
47
+ name: 'password',
48
+ message: '请输入密码:',
49
+ mask: '*', // 使用 * 遮盖输入
50
+ }
51
+ ]);
52
+ console.log(`密码长度: ${answers.password.length} 个字符`);
53
+ }
54
+ // #endregion
55
+ // #region 示例4: 数字输入
56
+ async function numberInput() {
57
+ console.log('\n=== 示例4: 数字输入 ===\n');
58
+ const answers = await inquirer_1.default.prompt([
59
+ {
60
+ type: 'number',
61
+ name: 'age',
62
+ message: '请输入你的年龄:',
63
+ default: 18,
64
+ }
65
+ ]);
66
+ console.log(`你的年龄是: ${answers.age} 岁`);
67
+ }
68
+ // #endregion
69
+ // #region 示例5: 确认输入 (Yes/No)
70
+ async function confirmInput() {
71
+ console.log('\n=== 示例5: 确认输入 ===\n');
72
+ const answers = await inquirer_1.default.prompt([
73
+ {
74
+ type: 'confirm',
75
+ name: 'shouldContinue',
76
+ message: '是否继续执行?',
77
+ default: true,
78
+ }
79
+ ]);
80
+ if (answers.shouldContinue) {
81
+ console.log('用户选择继续');
82
+ }
83
+ else {
84
+ console.log('用户选择取消');
85
+ }
86
+ }
87
+ // #endregion
88
+ // #region 示例6: 多个问题组合
89
+ async function multipleQuestions() {
90
+ console.log('\n=== 示例6: 多个问题组合 ===\n');
91
+ const answers = await inquirer_1.default.prompt([
92
+ {
93
+ type: 'input',
94
+ name: 'name',
95
+ message: '你的名字:',
96
+ },
97
+ {
98
+ type: 'input',
99
+ name: 'email',
100
+ message: '你的邮箱:',
101
+ },
102
+ {
103
+ type: 'number',
104
+ name: 'age',
105
+ message: '你的年龄:',
106
+ },
107
+ {
108
+ type: 'confirm',
109
+ name: 'subscribe',
110
+ message: '是否订阅新闻?',
111
+ default: false,
112
+ }
113
+ ]);
114
+ console.log('\n用户信息:');
115
+ console.log(JSON.stringify(answers, null, 2));
116
+ }
117
+ // #endregion
118
+ if (require.main === module) {
119
+ const exampleNumber = process.argv[2];
120
+ const examples = {
121
+ '1': simpleInput,
122
+ '2': inputWithDefault,
123
+ '3': passwordInput,
124
+ '4': numberInput,
125
+ '5': confirmInput,
126
+ '6': multipleQuestions,
127
+ };
128
+ if (exampleNumber && examples[exampleNumber]) {
129
+ examples[exampleNumber]();
130
+ }
131
+ else {
132
+ console.log('请指定示例编号 (1-6)');
133
+ console.log('例如: ts-node src/demo/inquirer/01-基础概念.ts 1');
134
+ }
135
+ }