概览
这个插件提供业务中常用的工具函数集合,所有工具支持按需引用。如果需要更全面的函数式编程工具库,推荐使用 Ramda.js。
工具模块
核心模块
- 数组工具 (Array) - 数组去重、分组、交集等操作
- 对象工具 (Object) - 深拷贝、合并、属性选择等对象处理
- 字符串工具 (String) - 字符串截断、驼峰转换等文本处理
- 数字工具 (Number) - 数字格式化、货币格式化、文件大小转换等
- 日期工具 (Date) - 日期格式化、相对时间、日期比较等
业务模块
- 文件操作 (File) - 文件下载、导出、扩展名解析等文件处理
- 加密工具 (Crypto) - AES加密解密、Base64编码等安全操作
- 编码工具 (Encode) - Base64混淆编码,适用于轻量级数据保护
- 浏览器工具 (Browser) - 语言检测、CSS变量读取、WebAssembly检测等
- 函数工具 (Function) - 防抖、节流、单次执行等函数增强
网络与存储
- 请求工具 (Request) - HTTP请求封装
- 路由工具 (Router) - 路由相关工具
- URL工具 (URL) - URL解析和处理
- MQTT工具 (MQTT) - MQTT消息通信
- 存储工具 (Storage) - LocalStorage、SessionStorage、Cookie、AWS S3等存储方案
其他工具
- SVG工具 (SVG) - SVG相关操作
关于 Ramda.js
Ramda.js 是一个实用的 JavaScript 函数式编程库,相比 Lodash 更加轻量且专注于函数式编程范式。
主要特点:
- 函数式优先 - 所有函数都是自动柯里化的
- 数据最后 - 参数顺序便于函数组合和管道操作
- 不可变性 - 不会修改原始数据
- 纯函数 - 无副作用,相同输入总是得到相同输出
适用场景:
- 需要复杂的数据转换和处理
- 函数式编程风格的项目
- 需要大量函数组合和管道操作
- 对代码可测试性和可维护性要求较高
使用示例:
javascript
import * as R from 'ramda';
// 函数组合示例
const processData = R.pipe(
R.filter(R.propEq('active', true)),
R.map(R.pick(['id', 'name'])),
R.sortBy(R.prop('name'))
);
// 柯里化应用
const add = R.add;
const add10 = add(10);
add10(5); // 15何时使用 @pt/utils vs Ramda.js:
- @pt/utils - 业务常用场景,开箱即用,无需学习成本
- Ramda.js - 复杂数据处理,函数式编程,需要更强大的工具链
其他场景推荐工具库
根据不同的业务场景,以下是一些高质量、轻量、现代的 JavaScript/TypeScript 工具库推荐:
🕒 时间处理
date-fns ⭐ 推荐首选
特点:
- 模块化设计,支持按需引入
- Tree-shaking 友好,只打包使用的函数
- 纯函数实现,完全支持 TypeScript
- 体积小巧,性能优异
使用示例:
javascript
import { format, addDays, subMonths, isAfter } from 'date-fns';
// 日期格式化
format(new Date(), 'yyyy-MM-dd HH:mm:ss');
// 日期计算
const threeDaysLater = addDays(new Date(), 3);
const lastMonth = subMonths(new Date(), 1);
// 日期比较
isAfter(new Date(), lastMonth); // truedayjs
特点:
- API 类似 Moment.js,但体积仅 2KB
- 插件化架构,按需加载功能
- 适合需要 Moment 风格但追求轻量的项目
使用示例:
javascript
import dayjs from 'dayjs';
import relativeTime from 'dayjs/plugin/relativeTime';
import 'dayjs/locale/zh-cn';
dayjs.extend(relativeTime);
dayjs.locale('zh-cn');
dayjs().format('YYYY-MM-DD');
dayjs().add(1, 'day').format('YYYY-MM-DD');
dayjs().fromNow(); // "几秒前"注意
Moment.js 已进入维护模式,不建议在新项目中使用。
🧮 数学计算
mathjs
特点:
- 支持表达式解析和求值
- 支持大数、复数、矩阵运算
- 支持单位换算和符号计算
- 适用于计算器、公式引擎、科学应用
使用示例:
javascript
import { evaluate, parse, derivative } from 'mathjs';
// 表达式求值
evaluate('sqrt(16) + sin(pi / 2)'); // 5
// 单位换算
evaluate('5 inch to cm'); // 12.7 cm
// 符号计算
derivative('x^2 + 3x', 'x'); // 2*x + 3decimal.js / big.js
用途: 高精度浮点运算,避免 JavaScript 精度问题
使用示例:
javascript
import Decimal from 'decimal.js';
// 避免精度问题
new Decimal(0.1).plus(0.2).toString(); // "0.3"
// 金融计算
new Decimal(100.05).times(1.1).toFixed(2); // "110.06"📊 按场景推荐组合
| 场景 | 推荐库 |
|---|---|
| 函数式编程 | Ramda / remeda |
| 日期处理 | date-fns(首选) / dayjs |
| 数学公式 | mathjs(复杂) / decimal.js(精度) |
| 数据校验 | Zod |
| 不可变更新 | Immer |
| 通用工具 | Radash(现代) / 原生 JS(简单场景) |
提示
如果你需要针对特定项目类型(如:React 后台系统、Node.js API、数据可视化等)的更精准建议,请参考各库的官方文档或社区最佳实践。