Faker 使用指南:从 Node.js 到浏览器,掌握 @faker-js/faker 的完整用法

📅 发布时间:2026/9/14 5:41:46
Faker 使用指南:从 Node.js 到浏览器,掌握 @faker-js/faker 的完整用法
Faker 使用指南从 Node.js 到浏览器掌握 faker-js/faker 的完整用法【免费下载链接】fakerGenerate massive amounts of fake data in the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/faker/faker本指南以 faker 仓库 docs/guide/usage.md 为核心系统讲解faker-js/faker在各种运行环境下的接入方式、TypeScript 配置要点、可复现随机结果的种子机制以及如何用工厂函数生成复杂业务对象。读完本文你将能在 Node.js、浏览器控制台、Deno/CDN 场景中正确引入并使用 Faker写出稳定可复现的测试数据生成代码并掌握simpleFaker轻量生成与seed/refDate复现技巧。环境要求与安装Faker 支持在浏览器与 Node.js 中运行。当前仓库package.json声明engines.node: ^22.13.0 || ^23.5.0 || 24.0.0因此请确保 Node.js 版本满足要求。安装时推荐作为开发依赖devDependency引入# npm npm install faker-js/faker --save-dev # pnpm pnpm add faker-js/faker --save-dev # yarn yarn add faker-js/faker --dev # deno deno add --dev faker-js/faker安装完成后即可从faker-js/faker导入使用下面的章节覆盖各个运行环境。在 Node.js 中使用Faker 同时提供 ESM 与 CommonJS 两种导入方式包本身type: module但通过构建产物同时支持require与import见 package.json 的exports与main/module字段。ESM推荐import { faker } from faker-js/faker; // 或若想要不同语言环境 // import { fakerDE as faker } from faker-js/faker; const randomName faker.person.fullName(); // Rowan Nikolaus const randomEmail faker.internet.email(); // Kassandra.Haleyerich.bizCommonJSconst { faker } require(faker-js/faker); // 或若想要不同语言环境 // const { fakerDE: faker } require(faker-js/faker); const randomName faker.person.fullName(); // Rowan Nikolaus const randomEmail faker.internet.email(); // Kassandra.Haleyerich.biz关于语言环境的选用、自定义与回退策略请参阅 本地化指南。从源码看fakerDE这类预构建实例来自 src/locale/ 目录下各语言定义如de.ts每个实例都基于 Faker 主类 构造而默认的faker实例使用en数据。在浏览器中使用你可以直接打开浏览器控制台Ctrl Shift J/F12体验 Faker在官方文档网站上可以通过await enableFaker()注入或者直接在控制台运行const { faker } await import(https://esm.sh/faker-js/faker); const randomName faker.person.fullName(); // Amber Keebler const randomEmail faker.internet.email(); // Norma13hotmail.com部分网站可能有防护策略阻止加载外部代码通常本地开发服务器dev server没有问题。作为替代方案你可以创建一个简单的 HTML 文件并用浏览器打开script typemodule import { faker } from https://esm.sh/faker-js/faker; // Caitlyn Kerluke const randomName faker.person.fullName(); // Rustyarne.info const randomEmail faker.internet.email(); document.getElementById(name).value randomName; document.getElementById(email).value randomEmail; /script input idname / input idemail /注意在浏览器中实验非常方便 但由于 Faker 携带大量用于生成数据的字符串它是一个体积很大的包压缩后 5 MiB。请避免在你的 Web 应用中部署完整的 Faker 包浏览器场景只适合实验与演示。如果只是需要少量非本地化数据请优先使用后文介绍的simpleFaker。CDN 与 Deno在 Deno 或纯 CDN 场景直接通过 URL 导入即可import { faker } from https://esm.sh/faker-js/faker; const randomName faker.person.fullName(); // Willie Bahringer const randomEmail faker.internet.email(); // Tomasa_Ferry14hotmail.com注意在 Deno 中强烈建议为导入加上版本标签例如import { faker } from https://esm.sh/faker-js/fakerv10.6.0以避免后续版本升级导致输出数据变化详见下文“可复现结果”中的版本说明。当前仓库版本为10.6.0见 package.json。其他可用 CDN 链接ESMhttps://cdn.jsdelivr.net/npm/faker-js/faker/esmCJShttps://cdn.jsdelivr.net/npm/faker-js/fakerTypeScript 支持Faker 默认假定你使用 TypeScript严格模式。不使用 TS 也可以但错误的参数类型不会得到专门的报错信息。要让类型提示正常工作请在tsconfig中检查以下compilerOptions{ compilerOptions: { moduleResolution: Bundler, // 或 Node10、Node16、Node20、NodeNext strict: true // 可选但推荐 } }{ compilerOptions: { moduleResolution: Bundler, // 或 Node20 或 NodeNext strict: true // 可选但推荐 } }仓库的package.json中types指向./dist/index.d.ts且通过typesVersions对 TypeScript 5.0 提供locale/*子路径类型见 package.json因此各语言实例如fakerDE也有完整的类型推导。仓库自身的 tsconfig.json 可作为工程化参考。可复现结果seed 与默认参考日期默认情况下Faker 每次调用都会返回不同的随机值faker.music.genre(); // Soul faker.music.genre(); // Reggae如果希望结果一致可以设置自己的种子seedfaker.seed(123); const firstRandom faker.number.int(); // 再次设置相同的种子会重置随机序列。 faker.seed(123); const secondRandom faker.number.int(); console.log(firstRandom secondRandom);seed 的底层实现从源码看seed()定义在 src/simple-faker.ts它接受一个number或number[]作为参数内部调用this.fakerCore.randomizer.seed(seed)并将种子返回不传参时使用randomSeed()生成随机种子——其实现为Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)见 src/internal/seed.ts。默认随机器是基于梅森旋转Mersenne Twister的伪随机数生成器见 src/core.ts 中generateMersenne53Randomizer。由于生成的值同时依赖种子与设置种子以来的调用次数在测试中建议使用硬编码种子若想保持“真随机但可复现”可以console.log(Running test with seed:, faker.seed())打印种子需要复现时再显式传入。注意升级到 Faker 新版本后同一种子可能产生不同结果因为底层数据姓名、单词等列表可能发生了变化。这也是 Deno 场景建议锁定版本号的原因。相对日期方法与参考日期有一类方法使用相对日期仅设置随机种子不足以复现例如faker.date.past、faker.date.future、faker.date.recent、faker.date.soon、faker.git.commitEntry和faker.string.uuid({ version: 7 })。原因在于这些方法默认以“今天”为基准生成之前或之后的日期而“今天”取决于代码运行时刻。解决方法是指定固定的参考日期refDate支持Date或字符串// 生成 2023-01-01 之后不久的一个日期 faker.date.soon({ refDate: 2023-01-01T00:00:00.000Z });也可以为所有这些方法设置一个全局默认参考日期// 影响之后所有 faker.date.* 调用 faker.setDefaultRefDate(2023-01-01T00:00:00.000Z);setDefaultRefDate的实现在 src/utils/set-default-ref-date.ts若传入函数则直接作为defaultRefDate源否则包装为() new Date(dateOrSource)。它接受string | Date | number | (() Date)还可以传入一个每次调用返回新Date实例的函数实现“按需推进时钟”的效果例如每次调用 1 秒默认值为() new Date()。完整示例见 src/simple-faker.ts 的 JSDoc。简单数据生成simpleFakerFaker 提供了一个simpleFaker用于生成不依赖任何语言环境的数据如数字与字符串helpers中的arrayElement、multiple等工具方法同样可用。这在仅需为测试环境生成 UUID 等数据、但不想初始化/加载完整 Faker 实例时非常有用——完整实例会包含至少 500KB 的本地化数据。import { simpleFaker } from faker-js/faker; const uuid simpleFaker.string.uuid();从 src/simple-faker.ts 的源码注释可见SimpleFaker只包含以下模块datatypedate不含month和weekdayhelpers不含fakelocation仅latitude、longitude、nearbyGPSCoordinatenumberstringSimpleFaker也支持seed()、setDefaultRefDate()与自定义构造new SimpleFaker({ seed })详见 SimpleFaker API 文档。核心构造逻辑在 src/core.ts 的createFakerCore未提供 locale 时核心没有任何本地化数据凡依赖本地化数据的方法调用会抛出错误这正符合“省内存、只生成通用数据”的定位。创建复杂对象工厂函数模式Faker 主要生成基础类型的值——现实世界中对象 schema 往往千差万别。因此要生成一个对象通常需要为它编写工厂函数factory function。以下示例使用 TypeScript 强类型定义模型import type { SexType } from faker-js/faker; type SubscriptionTier free | basic | business; interface User { _id: string; avatar: string; birthday: Date; email: string; firstName: string; lastName: string; sex: SexType; subscriptionTier: SubscriptionTier; }注意两点subscriptionTier不是普通字符串而只能是free、basic、business三者之一真实业务中模型不应依赖第三方库的类型这里的SexType即属此类本示例仅为演示。第一个工厂函数import { faker } from faker-js/faker; interface User { ... } function createRandomUser(): User { return { _id: faker.string.uuid(), avatar: faker.image.avatar(), birthday: faker.date.birthdate(), email: faker.internet.email(), firstName: faker.person.firstName(), lastName: faker.person.lastName(), sex: faker.person.sexType(), subscriptionTier: faker.helpers.arrayElement([free, basic, business]), }; } const user createRandomUser();这个版本已经可以满足大多数需求。但所有属性都是独立随机生成的可能产生不合理的组合例如sex为female而firstName却是Bob。重构让属性之间产生关联import { faker } from faker-js/faker; function createRandomUser(): User { const sex faker.person.sexType(); const firstName faker.person.firstName(sex); const lastName faker.person.lastName(); const email faker.internet.email({ firstName, lastName }); return { _id: faker.string.uuid(), avatar: faker.image.avatar(), birthday: faker.date.birthdate(), email, firstName, lastName, sex, subscriptionTier: faker.helpers.arrayElement([free, basic, business]), }; } const user createRandomUser();关键变化在于生成顺序先取sex作为firstName的输入参数保证性别与名字一致再取lastName本例中男女姓氏无差异故不传sex若有差异也可传入最后把firstName与lastName一并传入faker.internet.email({ firstName, lastName })使邮箱基于真实姓名生成更加合理。与_id使用的 UUID 实现碰撞概率极低不同email在参数相似时更容易产生重复值。关于生成唯一值的专门方案请参阅 唯一值生成指南。支持 overwrites 与 options为了对特定属性获得更多控制可以引入overwrites、options之类的参数import { faker } from faker-js/faker; function createRandomUser(overwrites: PartialUser {}): User { const { _id faker.string.uuid(), avatar faker.image.avatar(), birthday faker.date.birthdate(), sex faker.person.sexType(), firstName faker.person.firstName(sex), lastName faker.person.lastName(), email faker.internet.email({ firstName, lastName }), subscriptionTier faker.helpers.arrayElement([ free, basic, business, ]), } overwrites; return { _id, avatar, birthday, email, firstName, lastName, sex, subscriptionTier, }; } const user createRandomUser(); const userToReject createRandomUser({ birthday: new Date(2124-10-20) });解构默认值destructuring defaults模式让调用方可以只覆盖关心的字段。一个潜在的options参数可用于控制哪些可选属性被包含控制嵌套元素与数组如何合并或替换指定嵌套列表要生成的项目数量。工厂函数背后的 helpers 支撑示例中的faker.helpers.arrayElement([free, basic, business])对应 src/modules/helpers/array-element.ts随机返回数组中的一个元素。若需一次性生成多个元素可用faker.helpers.arrayElements(array, count)或faker.helpers.arrayElements(array, { min, max })批量执行任意生成函数则用faker.helpers.multiple(() faker.person.firstName(), { count: 3 })见 src/modules/helpers/module.ts 的示例。这些工具让工厂函数既能控制数量又能保持类型安全。进阶指引想了解如何选择、组合与自定义语言环境参见 本地化指南需要保证生成的邮箱、用户名等不重复参见 唯一值生成指南需要自定义随机数生成器Randomizer参见 随机器指南完整的模块与 API 清单可在 API 文档 中检索simpleFaker的专属 API 见 SimpleFaker 文档。至此你已经掌握了 Faker 在 Node.js、浏览器、CDN/Deno 中的接入方式、TypeScript 配置要点、种子与参考日期复现机制、轻量级simpleFaker以及用工厂函数生成任意复杂对象的完整方法论。Happy faking 【免费下载链接】fakerGenerate massive amounts of fake data in the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/faker/faker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考