# @dasmig/persona 中文文档

规范地址：https://npmcn.com/package/%40dasmig/persona/

版本：1\.7\.1
npm 元数据更新时间：2026-11-09T22:54:10.501Z
中文译文更新时间：2026-11-11T14:39:27.932Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40dasmig/persona
原文对照：https://npmcn.com/package/%40dasmig/persona/?lang=original
项目主页：https://github.com/dasmig/persona-generator/tree/main/package#readme
源码仓库：https://github.com/dasmig/persona-generator

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

- 包体积（解压后）：10.7 MB，16 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：0 个
- 首次发布：2026-10-18T17:05:48.852Z
- 最新版本发布：2026-11-09T22:54:10.159Z
- 近 30 天下载量：2189（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：13（近 12 个月 13 个）

## 中文简介

完全虚构的人物(姓名、国家、城市、出生、身体、个性、兴趣、工作),来自一个种子电话,在WebAssembly.

## 安装

```sh
npm install @dasmig/persona
```

也可以使用：`pnpm add @dasmig/persona`、`yarn add @dasmig/persona`、`bun add @dasmig/persona`

## README

# @ dasmig/ 个人

[![npm](https://img.shields.io/npm/v/@dasmig/persona.svg)](https://www.npmjs.com/package/@dasmig/persona) [![license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/dasmig/persona-generator/blob/main/LICENSE.MIT) [![node](https://img.shields.io/node/v/@dasmig/persona.svg)](https://www.npmjs.com/package/@dasmig/persona) [![types](https://img.shields.io/badge/types-included-blue.svg)](https://www.npmjs.com/package/@dasmig/persona)

完全虚构的人物 来自一个种子的呼叫:姓名,国家,城市,出生日期和年龄,身体,人格,宗教,爱好,最喜欢的媒体和工作. 没错 [人为生成者](https://github.com/dasmig/persona-generator) (C++23) 编译到WebAssembly,与 `lite` 它所构建的8个库的数据,所以运行时没有获取到任何数据,而是模块本身的 `persona.wasm`。 。 。 .

输出是虚构的样本数据,而不是真实人物的描述或预测.

```js
import { createPersonaGenerator } from '@dasmig/persona';

createPersonaGenerator().then(personas => {
  const p = personas.generate({ country: 'BR', sex: 'female', ages: { min: 25, max: 40 } });
  console.log(p.name, p.age, p.city.name, p.occupation.job?.label);

  // The same seed, request and data give the same persona, on every platform.
  const again = personas.generate({ country: 'BR', sex: 'female', ages: { min: 25, max: 40 }, seed: p.signature.seed });
});
```

## 安装

```
npm install @dasmig/persona
```

该套件仅是ES模块(没有通用JS构建),用于浏览器,Web Workers和Node 20+.

它自行运送了TypeScript类型(`index.d.ts`)和WebAssembly模块(A`persona.wasm`,大约8 MB,在3 MB 下压缩),例如Vite、webpack和esbuild等捆绑机从中取出 `new URL('persona.wasm', import.meta.url)`; 通过 `locateFile` 或者说 `wasmBinary` 改为 `createPersonaGenerator()` 以其他方式装入。 它没有依赖关系.

## 正在装入

`createPersonaGenerator()` 即时化模块并加载所有八个库的数据。 这需要 **秒或两秒** (大约1.4 s在桌面上,更多在电话上)并屏蔽它运行的线程,一个生成器使用大约90 MB的内存. 所以说:

-   **创建一个生成器并重用它 .** 每人大约需要一毫秒的三分之一.
-   **在浏览器中, 在 Web Worker 中创建它** 因此,页面保持响应, 并张贴个人(Plain JSON)回来:

```js
// persona-worker.js, started with new Worker(new URL('./persona-worker.js', import.meta.url), { type: 'module' })
import { createPersonaGenerator } from '@dasmig/persona';

const ready = createPersonaGenerator();
onmessage = async ({ data: request }) => {
  const personas = await ready;
  try {
    postMessage({ persona: personas.generate(request) });
  } catch (error) {
    postMessage({ error: error.message });
  }
};
```

模块在一个浏览器中找到 `persona.wasm` 下边(`new URL('persona.wasm', import.meta.url)`) (中文(简体) ). Vite和Webpack 5遵循这一点,将文件作为资产放出;Webpack警告说,它超过了建议的资产规模,这是预期的. 要从别处提供文件,请通过 Emscripten's `locateFile`,或以 `wasmBinary`数字 :

```js
const personas = await createPersonaGenerator({ locateFile: file => '/assets/' + file });
```

在节点,包 `node` 导出为 `persona.wasm` 从磁盘.

`persona.wasm` 是8.3 MB,大部分数据(城市和名称列表): 2.8 MB为gzip, 2.2 MB为brotli. 把它压缩.

## 请求

每个领域都是可选的。 所遗漏的东西是抽取的;所给的条件是赖以抽取的。 由国家定出城市,取名文化,身体和工作;由年龄和性别定出其余的.

| 外地 | 类型 | 默认 |
| --- | --- | --- |
| `country` | ISO 3166-1 α-2 代码来自 `personas.countries` (79个国家),任何案件 | 一个 `personas.countries`按人口加权 |
| `sex` | `'male'` 或者说 `'female'` | 与生俱来 |
| `ages` | `{ min, max }`,完成年份,0-120 | 国家时代金字塔 |
| `traits` | 个性特征数, 0 到 `personas.maxTraits` | 3个 |
| `referenceDate` | `'YYYY-MM-DD'` 或一个 `Date` (当地日期),1900-2100 | `'2023-07-01'` |
| `relations` | `true`,或 `{ up, down, siblings, partners, names, stepparents, home }`: 也把人的家人引入 `relatives` | 无 |
| `identity` | `true` 国家编号,或 `{ documents: ['passport', 'id_card'] }` 添加文档 | 无 |
| `finance` | `true` 用于一个活期账户,或 `{ accounts, cards, cardNumbers, network }`:机会,由该国全球指数股份 | 无 |
| `safe` | `true` 用图书馆的安全方法制作数字、文档、账户和卡片 | `false` |
| `home` | `true`,或 `{ type, tenure, area }` 强迫他们:还引出人格的家 `home` 及其家庭收入 `household_income` | 无 |
| `seed` | A 类 `bigint`,非负式安全整数,或 **十六进制** 字符串 | 随机 |

-   **国家.** 只有国家 `personas.countries` 在所有八个库中都有数据,所以另一个代码是一个错误而不是一个名字来自错误文化的人.
-   **特质.** 当没有其他特性与已经选择的特性相容时,返回的特性比要求的少(一组中的两块相互排斥).
-   **证件和钱包.** 数字、账户和卡片是测试数据。 无 `safe` 它们结构上是有效的,可能与真实的人相符:永远不要使用它们来识别任何人,开户,通过支票,或者在现场支付系统上. 见 [限制](https://github.com/dasmig/persona-generator#limits)。 。 。 .
-   **诸眷属.** `relations: true` 添加 `relatives`:人的父母、兄弟姐妹、同父异母的兄弟姐妹、伴侣和儿童(`up: 2` 加上祖父母, `down: 2` 孙子们),每个都有名字,出生日期,而对于死者来说,有死亡日期,由"活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活 `edges`。 。 。 . `members[0]` 就是那个人. `stepparents: true` 增加父母的新伴侣( )`stepfather`, (中文(简体) ), `stepmother`,带有 `step_parent_of` 子女,父母与子女(同父异母)和他们自己的子女`stepsibling`和 `home: true` 添加 `household`和这个人住在一起 两者都是默认关闭的. 家族有自有的种子溪流,所以其余的人物a与所生的和所生的相同.
-   **归.** `home: true` 添加 `home` (财产继承人的住房类型、使用权、房间、面积、建造年份和 `monthly_cost`和 `household_income`家里每个人都能赚多少 与 `relations`家适合我们家 `household`家是开着的;没有家,家是单独吸引的. `monthly_cost` 财务报告和审定财务报表 `household_income` 为: `null` 当家里没人挣钱的时候.
-   **约会.** 发电机从不读钟 过 `referenceDate: new Date()` 从今天开始,如果人必须重播,则保留与种子的日期.
-   **种子来.** 种子为64位无符号整数. 字符串读取为十六进制,可选择在 `0x`,这是形式 `signature.seed`数字 : `seed: '42'` 是 0x42(66),而不是42。 使用一个 `bigint` 以上种子的十六进制字符串 `Number.MAX_SAFE_INTEGER`。 。 。 .

生成任何内容前的无效请求: a `TypeError` 对于错误类型或未知字段(错误的字段) `contry` 是一个错误,而不是一个随机的国家)和 `RangeError` 用于超出范围的值。 信息说哪个领域和为什么。 一个失败的呼叫让生成器可用 .

## 结果

`generate()` 返回 a `Persona` (见 `index.d.ts`) (中文(简体) ). 它已经 `name`, (中文(简体) ), `sex`, (中文(简体) ), `age`, (中文(简体) ), `admin1` (州或省)和 `signature`,而每个图书馆自己的结果在 `country`, (中文(简体) ), `city`, (中文(简体) ), `birth`, (中文(简体) ), `biodata`, (中文(简体) ), `personality`, (中文(简体) ), `interest` 财务报告和审定财务报表 `occupation`。 。 。 . `generateJson()` 返回与 JSON 文本相同的文本,与 C++ 库所写的文本完全相同.

每个部分都取自自己的随机流,从人物的种子中分出. 强迫一种选择不会转移不相干的部分:与另一种性别的同种保持了城市和个性.

## 电池

对于测试数据和种群,从一批种子中生成许多人:

```js
// 10,000 personas, as objects or as JSON Lines (one persona per line).
const people = personas.generateBatch({ request: { country: 'BR' }, count: 10000, seed: 42 });
const lines = personas.generateBatchJsonl({ request: { country: 'BR' }, count: 10000, seed: 42 });

// The same personas, split across workers (Web Workers in a browser, worker threads in Node).
import { createPersonaPool } from '@dasmig/persona';
const pool = await createPersonaPool({ workers: 4 });
const same = await pool.generateBatchJsonl({ request: { country: 'BR' }, count: 10000, seed: 42 });
pool.close();
```

-   **个人a `i` 一组** 没错 `generate({ ...request, seed })` 分批出产的种子 `i` (单位:千美元)`core::item_seed` 在 C++ 库中。 因此,任何一个人从自己的 `signature.seed`,可以单独生成一个范围(`first: 1000` 起始于 persona 1000),相继相继相继相继的两批相继而相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相继相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相.
-   **选项.** `request` (以上字段除外) `seed`, (中文(简体) ), `count` (0至2^31-1), (中文(简体) ), `seed` (一个如果被忽略的随机的,使批次无法重复)和 `first` (默认为0).
-   **速为.** 在节点24的一台发电机上,大约每秒14000人,20,000人,有2个和38,000个池子,有4个池子,一旦池子开始(约半秒). JSON 线条格式跳过构建对象.
-   **记忆.** 每个工人都加载自己的模块,大约60 MB,一个池子默认核数,最多4个. 游泳池需要没有 `SharedArrayBuffer`,所以它在任意一页都起作用:片段作为字符串行走.
-   在浏览器中, 池启动模块 Web Works from `pool-worker.mjs` ; 后面的捆绑器 `new URL(..., import.meta.url)` 捡起.

## 重放人物为

要在以后(例如,从保存的游戏中)重现一个人,则存储其 `signature.seed` 和它提出的要求,包括: `referenceDate`。 。 。 .

同样的种子和请求给予相同的人a **只有相同数据**。 。 。 . `personas.dataHash` 查明所有八个图书馆的数据, `personas.identityDataHash` id -生成者, `personas.financeDataHash` 金融创造者, `personas.propertyDataHash` 财务报告和审定财务报表 `personas.relationshipDataHash` 两个家庭加,和 `personas.versions` 列出模块创建的库版本。 存储 `dataHash` 与种子相伴:如果一个软件包更新更改了它,被保存的种子会给出不同的人称.

一个人的每个部分a 还有一个 `signature`,拥有自己的种子和库中的数据散列.

## 数据

这些数据来自开放式数据集(地名、mledoze/countries、联合国世界人口前景、NCD-RisC、CIA世界概况介绍、劳工组织统计数据库等)以及为图书馆编写的目录. `DATA_LICENSES.txt` 列出每个来源及其许可证。 名字来自 [名称数据集](https://github.com/philipperemy/name-dataset); 参见名称生成器的 [数据说明](https://github.com/dasmig/name-generator/blob/HEAD/doc/data.md) 因为它的来源.

每个图书馆自行记录其数据限制 `doc/data.md`。 。 。 .

## 版本数

软件包版本是自己的. `personas.versions` 列出个人生成器的释放和库的释放 `persona-generator: 'v3.0.0'`),每个软件包的放行都标记 `package-v<version>` 输入 [仓库](https://github.com/dasmig/persona-generator/releases),带有其注释中包含的图书馆版本. 同种种子只为同类库版本提供同人称,因此更改输出的库更新是包的主要版本.

资料来源: [遗传/包装](https://github.com/dasmig/persona-generator/tree/main/package)问题: [github.com/dasmig/人-生成人/问题](https://github.com/dasmig/persona-generator/issues)。 。 。 .

## 许可证

代码的麻省理工学院;见 `DATA_LICENSES.txt` 数据.

## 常见问题

### @dasmig/persona 是什么？

完全虚构的人物\(姓名、国家、城市、出生、身体、个性、兴趣、工作\),来自一个种子电话,在WebAssembly\.

### 如何安装 @dasmig/persona？

在项目目录运行 npm install @dasmig/persona，或使用 pnpm add / yarn add / bun add。

### @dasmig/persona 支持 TypeScript 吗？

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

### @dasmig/persona 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @dasmig/persona 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=20。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @dasmig/persona 可以商用吗？

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

### @dasmig/persona 的下载量有多少？

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

### @dasmig/persona 还在维护吗？

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

