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

发布时间:2026/6/8 13:59:26

1.5万Star的UUID生成库:零依赖,npm周下载量过亿 文章目录1.5万Star的UUID生成库零依赖npm周下载量过亿7 个版本各有用处一行命令上手不只是生成 UUIDv7 解决了一个实际问题两个注意点总结1.5万Star的UUID生成库零依赖npm周下载量过亿uuid 在 GitHub 上拿到了 1.5 万 Starnpm 的周下载量超过 1 亿次。它做的事情不复杂按照 RFC9562 规范生成 UUID。但不复杂的背后是覆盖了 7 个 UUID 版本、横跨浏览器、Node.js、React Native 和命令行的全场景支持外加零依赖。7 个版本各有用处UUID 不只有一种。RFC9562 定义了多个版本各自有不同的生成策略v1时间戳加 MAC 地址能追溯到生成机器的具体时间点v3基于命名空间做 MD5 哈希同样的输入永远产出同样的 UUIDv4纯随机数使用率最高的版本v5基于命名空间做 SHA-1 哈希RFC 推荐用 v5 替代 v3v6v1 的字段重排版把时间戳高位放到前面对 B-tree 索引更友好v7Unix 毫秒时间戳打头后面补随机数天然按时间递增v8 留给实验场景库本身不提供生成方法但validate()和version()能识别 v8 UUID。一行命令上手npminstalluuidimport{v4asuuidv4}fromuuid;uuidv4();// b18794e8-5d0d-417c-b361-ba38e78411b4命令行也能直接用npx uuid ddeb27fb-d9a0-4624-be4d-4615062daed4指定版本生成npx uuid v1 npx uuid v7 npx uuid v3hello1b671a64-40d5-491e-99b0-da01ff1f3341不只是生成 UUID除了生成uuid 还提供了校验和解析能力validate()判断一个字符串是否为合法 UUIDversion()返回 RFC 版本号import{validate,version}fromuuid;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 就够用了。

相关新闻