比UUID更快更小更强大!NanoID唯一ID生成神器全解析

1. 为什么选择NanoID?

  • 小巧. 118字节 (经过压缩和Brotli处理)。没有依赖。Size Limit 控制大小。
  • 安全. 它使用硬件随机生成器。可在集群中使用。
  • 紧凑. 它使用比 UUID(A-Za-z0-9_-)更大的字母表。因此,ID 大小从36个符号减少到21个符号。
  • 可移植. Nano ID 已被移植到 20种编程语言

2. 快速上手:如何安装?

Node.js环境:

bash 复制代码
npm install nanoid

浏览器CDN(兼容 ESM/UMD):

html 复制代码
<script src="https://cdn.jsdelivr.net/npm/nanoid/nanoid.js"></script>

3. 生成一个唯一ID

最基本的用法,只需一行代码:

js 复制代码
import { nanoid } from 'nanoid';

const id = nanoid();
console.log(id); // 如:Kh_1OuFVecVCKfMdj1NXq
  • 默认ID 长度为21字符
  • 随机,URL安全(不会出现 + / = )

4. 自定义ID长度

觉得21字符不合适?自定义更短/更长都OK:

js 复制代码
console.log(nanoid(10));  // 10位ID,如: Y3Xh9md3Wz
console.log(nanoid(32));  // 32位ID

长度越长碰撞概率越低,如果对安全性要求极高可适当加长


5. 自定义字符集 (高级技巧)

有时候你可能需要生成仅包含数字、限定范围字符,甚至全大写/小写字母的ID。NanoID可以轻松胜任!

js 复制代码
import { customAlphabet } from 'nanoid';

// 仅数字ID
const nanoidNumber = customAlphabet('1234567890', 8);
console.log(nanoidNumber()); // 24736672

// 全大写字母+数字
const nanoidUpper = customAlphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 8);
console.log(nanoidUpper()); // OO8QE8V0

自定义字符集让你的ID生成100%满足业务和审美需求。


6. 批量生成唯一ID(如:批量插入数据用)

js 复制代码
import { nanoid } from 'nanoid';

const ids = Array.from({ length: 5 }, () => nanoid());
console.log(ids); // ['wr9bcsr1Te5HKEn_WYVKx','Fho3hazZDYNGWorG7APit','VIuIpbrVamSjnKMVg9IpO','3ArbZPt8qc_JL_IF8WTbJ','V9YCFTNFgaWF6hnQRgJBH']

7. 小结

NanoID是现代JavaScript唯一ID生成的最佳选择。它既高效、安全、可配置、易用,完全可以替代UUID、shortid、cuid等ID方案,真正让"唯一ID"这件事从此无忧。


如果你喜欢本教程,记得点赞+收藏!关注我获取最新JavaScript开发干货。

相关推荐
摘星编程4 分钟前
React Native + OpenHarmony:自定义useEllipsis省略号处理
javascript·react native·react.js
2401_8590490814 分钟前
git submodule update --init --recursive无法拉取解决
前端·chrome·git
这是个栗子32 分钟前
【Vue代码分析】前端动态路由传参与可选参数标记:实现“添加/查看”模式的灵活路由配置
前端·javascript·vue.js
刘一说41 分钟前
Vue 动态路由参数丢失问题详解:为什么 `:id` 拿不到值?
前端·javascript·vue.js
熊猫钓鱼>_>1 小时前
动态网站发布部署核心问题详解
前端·nginx·容器化·网页开发·云服务器·静态部署
方也_arkling1 小时前
elementPlus按需导入配置
前端·javascript·vue.js
好好研究1 小时前
Spring Boot - Thymeleaf模板引擎
java·spring boot·后端·thymeleaf
爬山算法1 小时前
Hibernate(76)如何在混合持久化环境中使用Hibernate?
java·后端·hibernate
爱吃大芒果1 小时前
Flutter for OpenHarmony 实战: mango_shop 资源文件管理与鸿蒙适配
javascript·flutter·harmonyos
我的xiaodoujiao1 小时前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 44--将自动化测试结果自动推送至钉钉工作群聊
前端·python·测试工具·ui·pytest