# @akashrajpurohit/snowflake-id 中文文档

规范地址：https://npmcn.com/package/%40akashrajpurohit/snowflake-id/

版本：2\.0\.0
npm 元数据更新时间：2023-10-31T14:51:19.200Z
中文译文更新时间：2026-11-05T22:32:45.018Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40akashrajpurohit/snowflake-id
原文对照：https://npmcn.com/package/%40akashrajpurohit/snowflake-id/?lang=original
项目主页：https://github.com/AkashRajpurohit/snowflake-id
源码仓库：https://github.com/AkashRajpurohit/snowflake-id

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：25.9 kB，11 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2023-05-13T15:40:08.282Z
- 最新版本发布：2023-10-31T14:51:19.017Z
- 近 30 天下载量：11871（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：12（近 12 个月 0 个）

## 中文简介

一个简单而轻量级的Node.js库来生成独特的雪花ID.

## 安装

```sh
npm install @akashrajpurohit/snowflake-id
```

也可以使用：`pnpm add @akashrajpurohit/snowflake-id`、`yarn add @akashrajpurohit/snowflake-id`、`bun add @akashrajpurohit/snowflake-id`

## README

# @akashrajpurohit/雪花-id

### 一个简单而轻量级的Node.js库来生成独特的雪花ID.

  

 [![Build states](https://github.com/AkashRajpurohit/snowflake-id/actions/workflows/test-and-release.yml/badge.svg?branch=main)](https://github.com/AkashRajpurohit/snowflake-id/actions/workflows/test-and-release.yml)[![npm latest version](https://img.shields.io/npm/v/@akashrajpurohit/snowflake-id/latest.svg) ](https://www.npmjs.com/package/@akashrajpurohit/snowflake-id)[![npm bundle size](https://img.shields.io/bundlephobia/min/@akashrajpurohit/snowflake-id) ](https://www.npmjs.com/package/@akashrajpurohit/snowflake-id)![Visitors count](https://visitor-badge.laobi.icu/badge?page_id=@akashrajpurohit~snowflake-id.visitor-badge&style=flat-square&color=0088cc) [![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/AkashRajpurohit/7336f237b82d9581c5f52405f87db531/raw/snowflake-id-coverage.json) ](https://github.com/AkashRajpurohit/snowflake-id/actions)[![NPM license](https://img.shields.io/npm/l/@akashrajpurohit/snowflake-id) ](https://www.npmjs.com/package/@akashrajpurohit/snowflake-id)[![follow on twitter](https://img.shields.io/twitter/follow/akashwhocodes.svg?style=social&label=@akashwhocodes)](https://twitter.com/akashwhocodes)

[错误报告](https://github.com/AkashRajpurohit/snowflake-id/issues/new?template=bug_report.md) • 妇女 [特性请求](https://github.com/AkashRajpurohit/snowflake-id/issues/new?template=feature_request.md)

  

* * *

`@akashrajpurohit/snowflake-id` 是用于生成适合用作分布式系统中主密钥的独特和分布式ID的节点.js库.

它生成64位的ID(以字符串格式),由时间戳,工人ID和序列号组成. 这些身份证基于 [推特上的"雪花"标识](https://github.com/twitter-archive/snowflake/tree/snowflake-2010) 生成算法.

> 详细阅读 [雪花身份证是什么](https://akashrajpurohit.com/blog/snowflake-id-generating-unique-ids-for-distributed-systems/?ref=github-desc)

## 安装

您可以安装 `@akashrajpurohit/snowflake-id` 使用pnpm/npm/yarn:

```bash
pnpm add @akashrajpurohit/snowflake-id

# OR

npm install @akashrajpurohit/snowflake-id

# OR

yarn add @akashrajpurohit/snowflake-id
```

## 使用量 +++

这里有一个如何使用的例子 `@akashrajpurohit/snowflake-id`数字 :

```javascript
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';

const snowflake = SnowflakeId({
  workerId: 1,
  epoch: 1597017600000,
});

console.log(snowflake.generate()); // 14755887168818983731200
```

这将以字符串格式生成一个独特的ID.

## 配置选项 QQ

SnowflakeId 构造器选择一个具有以下属性的选项对象:

-   `workerId` (可选):生成雪花ID的工人身份.
    
    如果未指定, 默认为 0 .
    
-   `epoch` (可选):一个以毫秒表示的时间戳代表ID生成的开始.
    
    默认为2020年8月10日00:00 UTC未指明的.
    

## 方法学

SnowflakeId的例子有以下方法: 雪花Id:

-   `generate()`:以字符串格式生成一个独特的ID.

## 处理出错 {}

SnowflakeId的例子可以抛出两个错误:

-   `Invalid Epoch Error`: SnowflakeId 实例如果时标无效,即如果时标大于当前时标,则丢出一个错误.
    
-   `Clock Backwards Error`: SnowflakeId 实例如果时钟向后移动,即如果当前时间戳小于上一个时间戳,则会抛出一个错误.
    

## 实例

以下是如何生成10个ID的例子:

```javascript
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';

const snowflake = SnowflakeId();

for (let i = 0; i < 10; i++) {
  console.log(snowflake.generate());
}
```

以下是如何使用不同的工人身份证生成身份证的例子:

```javascript
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';

const worker1 = SnowflakeId({ workerId: 1 });
const worker2 = SnowflakeId({ workerId: 2 });

console.log(worker1.generate()); // Generates an ID with worker ID 1
console.log(worker2.generate()); // Generates an ID with worker ID 2
```

在分布式系统中使用时,强烈建议您设置一个独特的 `workerId` 以减少IDS相撞.

虽然执行的细节取决于你, 但一个简单的方式设置 一个可能的独有 `workerId` 将使用 `process.pid`。 。 。 .

```javascript
import { SnowflakeId } from '@akashrajpurohit/snowflake-id';

const workerId = process.pid % 1024; // Using PID as workerId
const snowflake = SnowflakeId({ workerId });

const id = snowflake.generate(); // Generate a new Snowflake ID
console.log(id);
```

## 页:1

-   这个 `workerId` 参数可以省略,在这种情况下 `workerId` 将设定为 0。 然而,如果期望在多台机器上生成ID,建议设定特定的工人ID值来降低ID相撞的可能性.
    
-   时间戳应尽可能接近当前时间,以最大限度地延长发电机的使用寿命。 如果这个时代在以往或未来设定得太远,生成者可能无法为生成者的全部寿命生成ID.
    
    学多点
    
    时间戳被用作生成唯一ID的起点. 如果时间戳在过去或将来设置得太远,可以限制发电机的寿命. 这是因为生成的ID的时间戳部分与ID中的总位数相比一般是比特数较少的,因此可以比其他部分更快地达到时间戳部分的最大值.
    
    例如,如果将时标设定为1970年1月1日,即Unix时标,且发电机被配置为用41位来表示时标部分,则时标部分的最大值将在2088年达到. 这意味着在2088年后,生成器将不再能够生成独特的ID.
    
    因此,重要的是将时代时间戳设置在尽可能接近当前时间的地方,以最大限度地延长发电机的寿命. 这将确保生成的ID中的时间戳部分不会过快地达到其最大值,使生成者能够在更长的时间内继续生成独特的ID.
    

## 错误或请求 {}

如果你遇到任何问题,可以随意打开 [问题](https://github.com/AkashRajpurohit/snowflake-id/issues/new?template=bug_report.md)。如果你觉得项目缺少一个功能,请提出 [车票](https://github.com/AkashRajpurohit/snowflake-id/issues/new?template=feature_request.md) 我会调查的 也欢迎拉出请求.

## 哪里可以找到我吗

[![Website Badge](https://img.shields.io/badge/-akashrajpurohit.com-3b5998?logo=google-chrome&logoColor=white)](https://akashrajpurohit.com/) [![Twitter Badge](https://img.shields.io/badge/-@akashwhocodes-00acee?logo=Twitter&logoColor=white)](https://twitter.com/AkashWhoCodes) [![Linkedin Badge](https://img.shields.io/badge/-@AkashRajpurohit-0e76a8?logo=Linkedin&logoColor=white)](https://linkedin.com/in/AkashRajpurohit) [![Instagram Badge](https://img.shields.io/badge/-@akashwho.codes-e4405f?logo=Instagram&logoColor=white)](https://instagram.com/akashwho.codes/) [![Telegram Badge](https://img.shields.io/badge/-@AkashRajpurohit-0088cc?logo=Telegram&logoColor=white)](https://t.me/AkashRajpurohit)

## 常见问题

### @akashrajpurohit/snowflake-id 是什么？

一个简单而轻量级的Node\.js库来生成独特的雪花ID\.

### 如何安装 @akashrajpurohit/snowflake-id？

在项目目录运行 npm install @akashrajpurohit/snowflake-id，或使用 pnpm add / yarn add / bun add。

### @akashrajpurohit/snowflake-id 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @akashrajpurohit/snowflake-id 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @akashrajpurohit/snowflake-id 可以商用吗？

@akashrajpurohit/snowflake-id 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @akashrajpurohit/snowflake-id 的下载量有多少？

根据 npm 官方下载统计，@akashrajpurohit/snowflake-id 在 2026/10/06 – 2026/11/04 这 30 天内被下载 11,871 次，日均约 396 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @akashrajpurohit/snowflake-id 还在维护吗？

最新版本 2\.0\.0 发布于 2023/10/31（3 年前）；至今共发布 12 个版本，其中过去 12 个月发布了 0 个；首次发布于 2023/05/13。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

