当前位置: 首页 > news >正文

1.5万Star的UUID生成库:零依赖,npm周下载量过亿

文章目录

  • 1.5万Star的UUID生成库:零依赖,npm周下载量过亿
    • 7 个版本,各有用处
    • 一行命令上手
    • 不只是生成 UUID
    • v7 解决了一个实际问题
    • 两个注意点
    • 总结

1.5万Star的UUID生成库:零依赖,npm周下载量过亿

uuid 在 GitHub 上拿到了 1.5 万 Star,npm 的周下载量超过 1 亿次。

它做的事情不复杂:按照 RFC9562 规范生成 UUID。但"不复杂"的背后是覆盖了 7 个 UUID 版本、横跨浏览器、Node.js、React Native 和命令行的全场景支持,外加零依赖。

7 个版本,各有用处

UUID 不只有一种。RFC9562 定义了多个版本,各自有不同的生成策略:

  • v1:时间戳加 MAC 地址,能追溯到生成机器的具体时间点
  • v3:基于命名空间做 MD5 哈希,同样的输入永远产出同样的 UUID
  • v4:纯随机数,使用率最高的版本
  • v5:基于命名空间做 SHA-1 哈希,RFC 推荐用 v5 替代 v3
  • v6:v1 的字段重排版,把时间戳高位放到前面,对 B-tree 索引更友好
  • v7:Unix 毫秒时间戳打头,后面补随机数,天然按时间递增

v8 留给实验场景,库本身不提供生成方法,但validate()version()能识别 v8 UUID。

一行命令上手

npminstalluuid
import{v4asuuidv4}from'uuid';uuidv4();// 'b18794e8-5d0d-417c-b361-ba38e78411b4'

命令行也能直接用:

npx uuid ddeb27fb-d9a0-4624-be4d-4615062daed4

指定版本生成:

npx uuid v1 npx uuid v7 npx uuid v3"hello""1b671a64-40d5-491e-99b0-da01ff1f3341"

不只是生成 UUID

除了生成,uuid 还提供了校验和解析能力:

validate()判断一个字符串是否为合法 UUID,version()返回 RFC 版本号:

import{validate,version}from'uuid';validate('not a uuid');// falsevalidate('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b');// trueversion('6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b');// 4

两个方法组合就能做按版本过滤:

functionisV4(uuid){returnvalidate(uuid)&&version(uuid)===4;}

parse()把 UUID 字符串转成 16 字节的Uint8Arraystringify()反着来。这在把 UUID 写入二进制协议或数据库 binary 字段时会用到。另有两个常量:NIL(全零 UUID)和MAX(全 F UUID),在边界条件处理和数据库查询中偶尔用得上。

v7 解决了一个实际问题

MySQL InnoDB 用 B+ 树按主键排序存储。如果主键是随机 UUID,每次 INSERT 都可能导致页分裂,写入性能受影响。v7 UUID 把 Unix 毫秒时间戳放在前 48 位,让新生成的 ID 大致递增,减少页分裂,写入性能接近自增 ID。这也是 v7 在 uuid v10 版本中被加入的原因:社区对时间排序 UUID 的需求一直存在。

两个注意点

从 v11 开始,uuid 不再支持 CommonJS,只提供 ESM。还在用require('uuid')的项目需要改成import语法。

v1、v6、v7 这些时间相关方法在不传options时会用内部计数器保证同一毫秒内的唯一性;传了options则表示你自行控制参数,内部计数器不参与。这是 v11 修复的一个问题,之前 options 和内部状态可能相互干扰。

React Native / Expo 用户可能遇到getRandomValues() not supported,在入口文件最前面引入react-native-get-random-values即可。

总结

uuid 属于那种"一个库解决一个问题"的类型。API 干净,TypeScript 类型完备,零依赖、支持 tree-shaking。从生成、校验到解析,RFC9562 定义的操作它都提供了对应方法。项目里需要 UUID,不管跑在浏览器还是 Node 端,npm install uuid 就够用了。

king。从生成、校验到解析,RFC9562 定义的操作它都提供了对应方法。项目里需要 UUID,不管跑在浏览器还是 Node 端,npm install uuid 就够用了。

http://www.rkmt.cn/news/1486684.html

相关文章:

  • 进程控制知识
  • 051、蓝玻璃滤光片与红外污染:ISP 红外补偿算法与硬件 IRCF 的协同设计
  • Overleaf新手必看:从编译报错到PDF空白,5个LaTeX常见坑的保姆级解法
  • Unbuntu配置SSH服务+RustDesk远程桌面
  • 免费开源小说下载器:100+网站智能抓取,打造你的数字图书馆
  • Cortex-M33微控制器CoreMark性能基准测试移植与优化实战指南
  • i.MX 8ULP低功耗设计:硬件级GPIO状态保持原理与实现
  • 2026年中盘点:国内外十大AI大模型全能横评,谁才是真正的“六边形战士“?
  • 【Kafka源码解读和使用指南】第11篇:KafkaProducer源码全景图——一条消息的奇幻旅程
  • 音乐格式枷锁的终结者:浏览器端音乐解密技术深度解析
  • Cadence XOS内核实战:i.MX RT600 DSP多线程同步机制详解
  • 从S32K1到S32K3:汽车MCU平台迁移的架构变革与实战指南
  • 告别手动抓狂!高效排查Protege Cellfie导入Excel数据错误的3个实用脚本
  • 2026国产红外测油仪热门推荐:品牌技术测评与产业适配分析 - 水质分析仪器---高工
  • 告别IE!用tkwebview2在Python桌面应用中嵌入现代网页(附完整避坑指南)
  • 嵌入式DMA技术深度解析:从原理到实战应用与避坑指南
  • MPC8245与CF卡True IDE模式接口设计:时序匹配与握手模式实战
  • Apollo 配置中心非 Java 客户端实战:Python / Go / Node.js 本地服务如何远程读取配置
  • Windows端口转发终极管理工具:PortProxyGUI完全指南
  • 企业官网的安全架构:从 HTTPS、WAF 到备份与应急响应的 7 层防御工程
  • MATLAB一键绘制多温度黑体辐射光谱图(含300K–6000K普朗克曲线)
  • V/Hz闭环电机控制:从原理到嵌入式软件实现与调试
  • 雄县邦讯商贸:延庆羽绒被回收选哪家 - LYL仔仔
  • MC68SZ328 USB设备驱动开发:从硬件连接到数据传输的完整实践指南
  • 别再手动写报表了!用Stimulsoft.Reports.js + Vue CLI 5分钟搞定数据可视化
  • ComfyUI-FramePackWrapper:8GB显存流畅生成AI视频的终极指南
  • SC140 DSP非侵入式高精度性能测量:EOnCE硬件秒表计时器实战
  • ViGEmBus虚拟游戏控制器驱动:终极完整指南与安装教程
  • MIFARE Ultralight AES安全芯片:低成本应用的AES-128与CMAC实战指南
  • 69.x的平方根