当前位置: 首页 > 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.jsqmd.com/news/974961/

相关文章:

  • BLE低功耗设计实战:从KW47功耗数据到物联网设备续航优化
  • 2026年 广东抗干扰磁环/滤波磁环/铁氧体磁环厂家推荐榜:高效降噪与稳定性能实测优选指南 - 品牌发掘
  • 如何在CS2中快速实现专业级游戏增强:Osiris跨平台辅助工具完全指南
  • 开源协议选型指南
  • PotatoNV vs HCU Client:华为Bootloader解锁技术方案深度评估与实践指南
  • 进程控制知识
  • 如何用 HoYo.Gacha 终极工具轻松管理米哈游抽卡记录
  • Real-ESRGAN-GUI终极指南:三步让模糊图片变高清的免费神器
  • TOPSIS算法避坑指南:权重设置、数据标准化选哪个?新手常犯的3个错误
  • 2026年 东莞扁平磁环厂家推荐榜:大电流抗干扰磁芯,共模电感专用磁环源头工厂精选 - 品牌发掘
  • 051、蓝玻璃滤光片与红外污染:ISP 红外补偿算法与硬件 IRCF 的协同设计
  • Overleaf新手必看:从编译报错到PDF空白,5个LaTeX常见坑的保姆级解法
  • 青岛合创惠民起重设备:崂山区比较好的登高车租赁公司找哪家 - LYL仔仔
  • 2026 年长春财税公司实力榜单:全省覆盖,一站式工商财税解决方案 - 速递信息
  • 达州市人口相关数据分析与应用
  • qmc-decoder:3分钟解锁QQ音乐加密文件,让音乐自由播放的终极指南
  • 网盘直链下载助手:告别限速困扰的终极免费解决方案
  • 咸宁夜宵聚餐怎么选?本地宵夜用餐选址实用参考指南 - 速递信息
  • NXP Kinetis KE15Z到KE17Z MCU迁移实战:引脚、外设与中断向量表调整详解
  • 3步搞定STM32 PID温度控制系统:从零到工业级应用的完整指南
  • Unbuntu配置SSH服务+RustDesk远程桌面
  • Schema标记在GEO优化中的实战应用
  • 系统设计 - 设计 AI Agent 记忆系统(Memory System)
  • 【字节跳动】FAISS索引增量更新/持久化、DIN完整离线训练数据集逻辑、Flink多流拼接、天盾全链路风控流水线、NCode协议二进制封包、GR3底层驱动帧格式、全局限流熔断、日志隐秘埋点、内存镜像
  • 勐海宴席民俗科普:本土多年经验剖析生日宴优选润明酒楼的缘由 - 速递信息
  • 免费开源小说下载器:100+网站智能抓取,打造你的数字图书馆
  • TJA1446/TJA1466 CAN FD收发器配置、调试与FMEA实战指南
  • 如何快速构建3D地图:RTAB-Map完整指南
  • 广州劳力士螺丝凸起千万别锤!904L 钢硬度科普:为何错误工具会导致螺丝断裂?原厂修复与更换全流程揭秘 - 亨得利官方维修中心
  • 2026年中盘点:国内外十大AI大模型全能横评,谁才是真正的“六边形战士“?