Helper 工具库
一个用于平台检测、设备ID管理和时间操作的 TypeScript 工具库。
主要功能
- 平台检测 (Node.js、浏览器、Deno)
- 设备 ID 生成和管理
- 时间工具函数
使用指南
平台检测
用于检测当前代码运行的环境平台。
typescript
import { isDeno, isBrowser, isNode } from '@mgcloud/lib-utils';
// 检查当前平台
if (isNode) {
// Node.js 环境下的代码
} else if (isBrowser) {
// 浏览器环境下的代码
} else if (isDeno) {
// Deno 环境下的代码
}设备 ID 管理
设备 ID 系统用于生成和管理唯一的 10 位字符标识符,在浏览器环境中可以跨会话持久化存储。
typescript
import { deviceId, createDeviceId } from '@mgcloud/lib-utils';
// 使用默认设备 ID
console.log(deviceId); // 返回默认设备 ID
// 创建使用自定义存储键的设备 ID
const customDeviceId = createDeviceId('CUSTOM_STORAGE_KEY');
console.log(customDeviceId); // 返回使用自定义键存储的设备 ID特性:
- 生成独特的 10 位字符 ID,使用自定义编码字典
- 在浏览器环境中使用 localStorage 持久化存储
- 支持通过不同的存储键创建多个独立的设备 ID
- 使用线程安全的单例模式实现
- 采用自定义编码字典提升可读性和唯一性
时间工具
提供异步延时功能。
typescript
import { sleep } from '@mgcloud/lib-utils';
async function example() {
// 基础用法 - 延时 1 秒
await sleep(1000);
// 在 Node.js 环境下使用 unref 选项
await sleep(1000, true); // 允许进程在只剩下这个操作时退出
}API 文档
平台模块 (platform.ts)
isDeno: boolean- 在 Deno 环境下为 trueisBrowser: boolean- 在浏览器环境下为 trueisNode: boolean- 在 Node.js 环境下为 true
设备 ID 模块 (device-id.ts)
deviceId: string- 默认设备 ID 实例createDeviceId(key?: string): string- 创建新的设备 ID,可选择自定义存储键DEFAULT_DEVICEID_KEY: string- 默认存储键名 ('__MG_DEVICE_ID')DeviceIdManager- 设备 ID 管理器类(内部使用)- 使用单例模式确保每个存储键只有一个实例
- 提供设备 ID 的生成、存储和获取功能
时间工具模块 (time-utils.ts)
sleep(ms: number, isUnref: boolean = false): Promise<void>ms: 需要延时的毫秒数isUnref: 在 Node.js 环境下,如果为 true,允许进程在只剩这个操作时退出
不同平台的特定行为
浏览器环境
- 设备 ID 通过 localStorage 持久化存储
- sleep 函数使用标准的 setTimeout
Node.js 环境
- 设备 ID 仅在当前会话中有效(无持久化)
- sleep 函数支持 unref 选项
- 设备 ID 操作会输出到控制台日志
Deno 环境
- 支持基础功能
- 设备 ID 仅在当前会话中有效
- 使用标准的 setTimeout 行为
技术细节
设备 ID 生成机制
- 使用自定义字典进行字符编码,提供更好的可读性
- 生成固定长度为 10 位的字符串 ID
- 使用单例模式确保线程安全
- 支持通过不同的存储键创建多个独立的 ID 管理实例
设备 ID 存储策略
- 浏览器环境:使用 localStorage 持久化存储
- Node.js 环境:仅在内存中保存,每次重启后重新生成
- Deno 环境:仅在内存中保存,每次重启后重新生成
使用建议
平台检测
- 在编写跨平台代码时,建议先进行平台检测
- 根据不同平台特性选择合适的功能实现
设备 ID
- 默认设备 ID 适用于大多数场景
- 需要多个独立 ID 时,使用 createDeviceId 并指定不同的存储键
- 注意在非浏览器环境下 ID 不会持久化存储
时间工具
- 在需要异步延时的场景使用 sleep 函数
- 在 Node.js 环境下,如果是后台任务建议使用 unref 选项
导出方法
typescript
import {
isDeno,
isBrowser,
isNode,
sleep,
deviceId,
createDeviceId,
DEVICEID_KEY,
DEFAULT_DEVICEID_KEY,
} from '@mgcloud/lib-utils'