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 +179 -34
- package/lib/eventer.js +1240 -89
- package/lib/file.js +57 -48
- package/lib/lang.js +363 -35
- package/lib/timer.js +87 -15
- package/package.json +1 -1
- package/test.js +180 -4
- package/test_eventer.js +483 -0
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
|
-
$.
|
|
40
|
-
|
|
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
|
-
|
|
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
|
-
#####
|
|
351
|
+
##### 事件注册与移除
|
|
352
|
+
|
|
353
|
+
##### $.eventer.on(eventName, handler, options)
|
|
314
354
|
- 描述:注册事件监听器
|
|
315
355
|
- 参数:
|
|
316
|
-
- eventName:
|
|
356
|
+
- eventName: 事件名称(支持命名空间格式:namespace:event)
|
|
317
357
|
- handler: 事件处理函数
|
|
318
|
-
-
|
|
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.
|
|
321
|
-
-
|
|
368
|
+
##### $.eventer.off(eventName, key)
|
|
369
|
+
- 描述:移除事件监听器
|
|
322
370
|
- 参数:
|
|
323
371
|
- eventName: 事件名称
|
|
324
|
-
-
|
|
325
|
-
|
|
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.
|
|
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
|
-
-
|
|
337
|
-
|
|
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.
|
|
376
|
-
|
|
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
|
|
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
|
-
-
|
|
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
|
+
感谢所有为该项目做出贡献的开发者和用户!
|