mm_expand 1.8.9 → 1.9.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 CHANGED
@@ -5,41 +5,79 @@
5
5
 
6
6
  mm_expand是一个功能丰富的JavaScript工具库,为原生类型(String、Array、Number、Date等)提供全面的原型函数扩展,帮助开发者简化数据操作,提高代码效率和可维护性。
7
7
 
8
+ ## 项目介绍
9
+
10
+ 这个库通过扩展JavaScript原生对象的原型链,提供了丰富的数据操作方法,使开发者能够用更简洁的代码处理常见的数据操作任务。同时,它还包含了强大的事件系统、文件操作工具和对象处理功能,适用于各种JavaScript应用场景。
11
+
8
12
  ## 特点
9
13
 
10
- - 丰富的原生类型扩展方法
11
- - 简化文件系统操作
12
- - 强大的对象处理功能
13
- - 灵活的事件系统
14
- - 轻量级且高性能
15
- - 跨平台兼容
14
+ - **原生类型扩展**:为String、Array、Number、Date等原生类型提供丰富的原型方法
15
+ - **对象操作增强**:提供深度拷贝、对象合并、属性遍历等实用功能
16
+ - **文件系统简化**:直观的文件读写、复制、删除等操作方法
17
+ - **灵活事件系统**:支持命名空间、优先级、中间件、节流防抖等高级特性
18
+ - **数据转换工具**:JSON、XML、URL参数等格式转换功能
19
+ - **轻量高效**:核心功能轻量,性能优化良好
20
+ - **跨平台兼容**:支持Node.js和现代浏览器环境
16
21
 
17
22
  ## 安装
18
23
 
19
24
  ```bash
25
+ # 使用npm
20
26
  npm install mm_expand --save
27
+
28
+ # 使用yarn
29
+ yarn add mm_expand
30
+
31
+ # 使用pnpm
32
+ pnpm add mm_expand
21
33
  ```
22
34
 
23
35
  ## 快速开始
24
36
 
25
37
  ```javascript
26
- // 引入模块
38
+ // 引入模块(CommonJS)
27
39
  const $ = require('mm_expand');
28
40
 
29
- // 使用字符串扩展方法
41
+ // 基本用法示例
42
+
43
+ // 字符串扩展方法
30
44
  const fullPath = 'test.json'.fullname(); // 获取完整路径
45
+ const isFile = 'test.json'.isFile(); // 检查是否为文件
31
46
 
32
- // 使用数组扩展方法
47
+ // 数组扩展方法
33
48
  const newArray = [1, 2, 3].copy(); // 复制数组
49
+ const hasValue = [1, 2, 3].has(2); // 检查数组是否包含值
50
+
51
+ // 数字扩展方法
52
+ const roundedNum = 3.14159.toRound(2); // 四舍五入到2位小数
34
53
 
35
- // 使用日期扩展方法
54
+ // 日期扩展方法
36
55
  const date = '2024-01-01'.toTime(); // 转换为Date对象
56
+ const formattedDate = new Date().toStr('yyyy-MM-dd hh:mm:ss'); // 格式化日期
37
57
 
38
- // 使用事件系统
39
- $.eventer.on('event', (data) => {
40
- console.log(data);
58
+ // 对象操作
59
+ const copiedObj = $.copy({ a: 1, b: { c: 2 } }); // 深度拷贝对象
60
+
61
+ // 事件系统使用
62
+ // 注册事件
63
+ $.eventer.on('user:login', (userData) => {
64
+ console.log('User logged in:', userData);
65
+ });
66
+
67
+ // 触发事件
68
+ const result = $.eventer.emit('user:login', { id: 1, name: '张三' });
69
+
70
+ // 一次性事件
71
+ $.eventer.once('app:init', () => {
72
+ console.log('Application initialized');
41
73
  });
42
- $.eventer.run('event', { message: 'Hello' });
74
+
75
+ // 并行触发事件
76
+ $.eventer.runParallel('data:process', { items: [...] });
77
+
78
+ // 暂停和恢复事件
79
+ $.eventer.pause('user:*'); // 暂停所有用户相关事件
80
+ $.eventer.resume('user:*'); // 恢复所有用户相关事件
43
81
  ```
44
82
 
45
83
  ## API文档
@@ -308,33 +346,100 @@ await $.sleep(2000, obj, 'ok');
308
346
  ### 事件系统
309
347
 
310
348
  #### $.eventer
311
- - 描述:事件管理器实例
349
+ - 描述:功能强大的事件管理器实例,支持命名空间、优先级、中间件等高级特性
312
350
 
313
- ##### $.eventer.on(eventName, handler, key)
351
+ ##### 事件注册与移除
352
+
353
+ ##### $.eventer.on(eventName, handler, options)
314
354
  - 描述:注册事件监听器
315
355
  - 参数:
316
- - eventName: 事件名称
356
+ - eventName: 事件名称(支持命名空间格式:namespace:event)
317
357
  - handler: 事件处理函数
318
- - key: 事件处理器标识(可选)
358
+ - options: 配置选项(可选)
359
+ - key: 事件处理器标识
360
+ - priority: 优先级(数字,默认0,值越大优先级越高)
361
+ - 返回值:当前Eventer实例(支持链式调用)
362
+
363
+ ##### $.eventer.once(eventName, handler, options)
364
+ - 描述:注册一次性事件监听器(只触发一次后自动移除)
365
+ - 参数:同$.eventer.on
366
+ - 返回值:当前Eventer实例
319
367
 
320
- ##### $.eventer.once(eventName, handler, key)
321
- - 描述:注册一次性事件监听器(只触发一次)
368
+ ##### $.eventer.off(eventName, key)
369
+ - 描述:移除事件监听器
322
370
  - 参数:
323
371
  - eventName: 事件名称
324
- - handler: 事件处理函数
325
- - key: 事件处理器标识(可选)
372
+ - key: 要移除的处理器标识(可选,不提供则移除指定事件的所有处理器)
373
+ - 返回值:当前Eventer实例
374
+
375
+ ##### 事件触发
326
376
 
327
377
  ##### $.eventer.run(eventName, ...args)
328
- - 描述:触发事件
378
+ - 描述:触发事件(同步执行)
329
379
  - 参数:
330
380
  - eventName: 事件名称
331
381
  - ...args: 传递给事件处理器的参数
382
+ - 返回值:包含执行结果和取消方法的对象 { results: [...], cancel: Function }
332
383
 
333
- ##### $.eventer.del(eventName, key)
334
- - 描述:移除事件监听器
384
+ ##### $.eventer.runParallel(eventName, ...args)
385
+ - 描述:并行触发事件
386
+ - 参数:同$.eventer.run
387
+ - 返回值:包含执行结果和取消方法的对象 { results: [...], cancel: Function }
388
+
389
+ ##### $.eventer.emit(eventName, ...args)
390
+ - 描述:触发事件(别名,同run)
391
+ - 参数:同$.eventer.run
392
+ - 返回值:包含执行结果和取消方法的对象
393
+
394
+ ##### $.eventer.emitParallel(eventName, ...args)
395
+ - 描述:并行触发事件(别名,同runParallel)
396
+ - 参数:同$.eventer.runParallel
397
+ - 返回值:包含执行结果和取消方法的对象
398
+
399
+ ##### 事件控制
400
+
401
+ ##### $.eventer.pause(key)
402
+ - 描述:暂停指定事件
335
403
  - 参数:
336
- - eventName: 事件名称
337
- - key: 要移除的处理器标识(可选,不提供则移除所有)
404
+ - key: 事件名称(可选,不提供则暂停所有事件)
405
+ - 返回值:当前Eventer实例
406
+
407
+ ##### $.eventer.resume(key)
408
+ - 描述:恢复指定事件
409
+ - 参数:
410
+ - key: 事件名称(可选,不提供则恢复所有事件)
411
+ - 返回值:当前Eventer实例
412
+
413
+ ##### $.eventer.pauseAll()
414
+ - 描述:全局暂停所有事件
415
+ - 返回值:当前Eventer实例
416
+
417
+ ##### $.eventer.resumeAll()
418
+ - 描述:全局恢复所有事件
419
+ - 返回值:当前Eventer实例
420
+
421
+ ##### $.eventer.isPaused(key)
422
+ - 描述:检查事件是否被暂停
423
+ - 参数:
424
+ - key: 事件名称(可选,不提供则检查全局暂停状态)
425
+ - 返回值:布尔值
426
+
427
+ ##### 事件管理
428
+
429
+ ##### $.eventer.clear(keepNamespaces)
430
+ - 描述:清空所有事件监听器
431
+ - 参数:
432
+ - keepNamespaces: 是否保留命名空间结构(布尔值,默认false)
433
+ - 返回值:当前Eventer实例
434
+
435
+ ##### $.eventer.getMemoryReport()
436
+ - 描述:获取内存使用报告
437
+ - 返回值:包含事件统计信息的对象
438
+
439
+ ##### $.eventer.setMaxListeners(max)
440
+ - 描述:设置最大监听器数量(防止内存泄漏警告)
441
+ - 参数:
442
+ - max: 最大监听器数量
338
443
 
339
444
  ### 代码执行
340
445
 
@@ -372,23 +477,63 @@ await $.sleep(2000, obj, 'ok');
372
477
  2. **错误处理**:检查所有文件操作(saveText、saveJson等)的返回值,它们都返回布尔值表示成功/失败
373
478
  3. **异步操作**:对于需要等待的操作,如sleep、事件触发等,使用await/async语法
374
479
  4. **对象深拷贝**:使用`$.copy()`进行对象深拷贝,避免引用问题
375
- 5. **事件管理**:使用$.eventer系统进行事件发布订阅,降低代码耦合度
376
- 6. **性能优化**:处理大量数据时,优先使用异步方法避免阻塞主线程
480
+ 5. **事件管理**:
481
+ - 使用命名空间组织相关事件(如`user:login`, `user:logout`)
482
+ - 为长时间运行的事件处理添加取消机制
483
+ - 使用中间件进行事件处理前的通用逻辑
484
+ 6. **内存管理**:在不再需要时使用`off()`方法移除事件监听器,避免内存泄漏
485
+ 7. **性能优化**:
486
+ - 处理大量数据时,优先使用异步方法避免阻塞主线程
487
+ - 对频繁触发的事件使用节流或防抖功能
488
+ 8. **代码组织**:按功能模块组织代码,合理使用库的不同功能模块
489
+
490
+ ## 使用提示
491
+
492
+ - **原型扩展说明**:该库通过扩展原生对象的原型链提供功能,在某些严格模式或特殊环境中可能需要特别注意
493
+ - **模块导入**:在需要树摇(tree-shaking)的环境中,可以考虑导入特定的功能模块
494
+ - **版本兼容**:每次更新版本前,请查看更新日志了解可能的API变化
495
+ - **浏览器环境**:在浏览器环境中使用时,建议通过webpack、rollup等打包工具引入
496
+
497
+ ## 常见问题
498
+
499
+ **Q: 原型扩展会影响其他库吗?**
500
+ A: 我们的扩展方法都经过精心设计,避免与原生方法和常见库冲突。如果发现冲突,请及时提交Issue。
501
+
502
+ **Q: 如何在浏览器中使用?**
503
+ A: 通过打包工具(如webpack)打包后引入,或使用CDN服务(未来将支持)。
504
+
505
+ **Q: 支持TypeScript吗?**
506
+ A: 目前提供基本的JavaScript支持,TypeScript类型定义正在规划中。
377
507
 
378
508
  ## 兼容性
379
509
 
380
- - Node.js 10.x及以上版本
381
- - 支持所有现代浏览器(通过打包工具使用)
510
+ - Node.js 12.x及以上版本(推荐使用LTS版本)
511
+ - 支持所有现代浏览器(Chrome、Firefox、Safari、Edge等,需通过webpack、rollup等打包工具使用)
512
+ - 与CommonJS和ESM模块系统兼容
382
513
 
383
514
  ## 贡献指南
384
515
 
385
- 欢迎提交Issue和Pull Request!请确保您的代码遵循项目的编码规范。
516
+ 欢迎提交Issue和Pull Request!请确保您的代码遵循以下规范:
517
+
518
+ 1. 代码风格与现有项目保持一致
519
+ 2. 添加适当的注释和文档
520
+ 3. 编写测试用例确保功能正常
521
+ 4. 提交前运行测试确保没有引入新的问题
522
+
523
+ ## 更新日志
524
+
525
+ 详细的更新日志请查看项目的[Release页面](https://gitee.com/qiuwenwu91/mm_expand/releases)。
386
526
 
387
527
  ## 许可证
388
528
 
389
- [ISC License](LICENSE)
529
+ 本项目采用 [ISC License](LICENSE) 开源许可。
390
530
 
391
531
  ## 联系作者
392
532
 
393
- - GitHub: [https://github.com/](https://github.com/)
533
+ - 作者:邱文武
394
534
  - Gitee: [https://gitee.com/qiuwenwu91/mm_expand](https://gitee.com/qiuwenwu91/mm_expand)
535
+ - 项目Issues: [https://gitee.com/qiuwenwu91/mm_expand/issues](https://gitee.com/qiuwenwu91/mm_expand/issues)
536
+
537
+ ## 鸣谢
538
+
539
+ 感谢所有为该项目做出贡献的开发者和用户!