尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Faker.js(@faker-js/faker)入门指南:在浏览器与 Node.js 中批量生成真实感假数据

Faker.js(@faker-js/faker)入门指南:在浏览器与 Node.js 中批量生成真实感假数据 Faker.jsfaker-js/faker入门指南在浏览器与 Node.js 中批量生成真实感假数据【免费下载链接】fakerGenerate massive amounts of fake data in the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/faker/fakerFaker 是一个专注于生成真实感假数据fake but realistic data的开源 JavaScript/TypeScript 库面向测试与开发场景可在浏览器和 Node.js 环境中运行。本文基于当前仓库的文档与源码系统介绍 Faker 的核心定位、六大能力模块、安装与快速上手方式、多语言本地化机制以及可复现结果seed等关键实践读完即可在你的项目里用它填充单元测试、性能测试、演示 Demo 与尚未完成的后端接口数据。Faker 是什么为测试与开发而生的数据生成库Faker 的官方定位是一句话Generate massive amounts of fake (but realistic) data for testing and developmentdocs/index.md。它并不产生一眼假的随机内容而是尽量生成合理的数据——例如完整的姓名、看起来真实的邮箱、地址、电话等。从仓库文档docs/guide/index.md可以看到Faker 的典型应用场景包括单元测试Unit Testing为被测函数提供稳定、多样的输入数据性能测试Performance Testing批量构造海量样本数据验证系统吞吐构建演示Building Demos快速搭出有真实数据观感的前端原型后端未完成时先行开发用假数据驱动前端联调不被阻塞在接口进度上。值得注意Faker 的历史可以追溯到 Perl 语言的 Data::Faker本项目是其 JavaScript 移植版且官方文档只覆盖 JavaScript 实现docs/guide/index.md。环境要求与使用前提Faker 支持浏览器与 Node.js 两种运行环境当前仓库对应版本见 package.json要求 Node.js 版本不低于 22docs/guide/index.md。在使用前请确认你的运行环境满足该要求。核心能力总览六大特性模块Faker 文档首页用六个特性描述了它的核心能力域docs/index.md这些特性与源码中实际存在的模块一一对应特性能力说明对应源码模块 Person生成姓名、性别、个人简介、职位等src/modules/person Location生成地址、邮编、街道名、州/省、国家src/modules/location⏰ Date过去、现在、未来、最近、即将发生的时间src/modules/date Finance生成账户详情、交易记录、加密货币地址等src/modules/finance Commerce生成价格、产品名、形容词、产品描述src/modules/commerce Localization支持 70 语言区域生成对应语言的姓名、地址、电话src/locale/index.ts这六大能力只是入口。从 Faker 主类源码 可以看到完整的模块体系包含 24 个主题模块airline、animal、book、color、commerce、company、database、date、finance、food、git、hacker、helpers、image、internet、location、lorem、medical、music、person、phone、science、system、vehicle、word覆盖了从航空、动物、书籍到车辆、单词等非常广泛的领域。完整清单可参考 API 文档入口。三类模块的划分Faker 将模块划分为三类docs/guide/index.md基础数据类型模块datatype、date、number、string负责生成最底层的随机值主题专属模块animal、food等一大批按业务主题组织的模块helpers 工具模块提供arrayElement、multiple、fake等工具方法用于组合自有数据或其他 Faker 方法生成的数据。这种划分既方便按需检索 API也决定了包体结构基础类型与主题模块分离是后面轻量级 simpleFaker设计的前提。安装与快速上手安装方式Faker 官方建议将其作为**开发依赖Dev Dependency**安装docs/guide/index.md四种主流包管理器命令如下# 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第一段代码ESM 与 CJS安装后即可导入使用README.md、docs/guide/usage.md// ESM import { faker } from faker-js/faker; // CJS const { faker } require(faker-js/faker); const randomName faker.person.fullName(); // 如 Rowan Nikolaus const randomEmail faker.internet.email(); // 如 Kassandra.Haleyerich.biz注意上面的示例输出仅为示意实际值随随机序列变化。默认的faker实例使用英文en区域数据若需其他语言可导入对应预置实例例如import { fakerDE as faker } from faker-js/faker详见下文本地化一节。在浏览器中快速实验想在不搭工程的情况下体验 Faker可直接在浏览器控制台Ctrl Shift J/F12中通过 CDN 导入const { faker } await import(https://esm.sh/faker-js/faker); const randomName faker.person.fullName(); const randomEmail faker.internet.email();也可以创建一个简单的 HTML 文件在浏览器中打开docs/guide/usage.mdscript typemodule import { faker } from https://esm.sh/faker-js/faker; document.getElementById(name).value faker.person.fullName(); document.getElementById(email).value faker.internet.email(); /script input idname / input idemail /重要提醒浏览器端方式适合实验验证。由于 Faker 携带大量字符串数据完整包体 minified 后超过 5 MiBdocs/guide/usage.md不要将完整 Faker 包部署进生产 Web 应用。在 Deno/CDN 场景建议固定版本号例如https://esm.sh/faker-js/fakerv10.6.0。TypeScript 支持Faker 官方文档假设使用者开启 TypeScript strict 模式docs/guide/usage.md需要在tsconfig.json中确认以下compilerOptions{ compilerOptions: { moduleResolution: Bundler, // 或 Node10、Node16、Node20、NodeNext strict: true // 可选但推荐 } }不使用 TypeScript 也可以运行 Faker但官方不会对错误参数类型提供专门的报错信息。本地化70 语言区域与回退机制本地化是 Faker 最核心的差异化能力之一。文档首页明确写道支持over 70 locales用于生成真实感的姓名、地址与电话号码docs/index.md。切换语言区域默认faker实例输出英文数据需要其他语言时导入对应预置实例docs/guide/localization.mdimport { fakerDE as faker } from faker-js/faker; // 现在 faker.person.fullName() 会生成德语姓名从源码聚合入口 src/locale/index.ts 可以看到仓库为每个区域生成了独立的fakerXX实例并导出同时还导出了allFakers所有预置实例的映射与allLocales所有原始区域定义。区域代码采用系统化命名前两位小写为 ISO 639-1 语言码如ar、en可选的两位大写国家码遵循 ISO 3166-1 alpha-2如en_US、en_AU极少情况下追加变体后缀如en_AU_ocker澳式口音、sr_RS_latin塞尔维亚拉丁字母书写。构建自定义实例与回退链不同区域对模块的覆盖程度不同。预置实例在缺少某区域数据时会自动回退到英文英文是数据最完整的语言若不希望这样可以自行构建实例并显式指定回退顺序README.md、docs/guide/localization.mdimport { Faker, base, de, de_CH, en } from faker-js/faker; // 自定义区域定义覆盖所有回退项 const customLocale { title: My custom locale, internet: { domainSuffix: [test], }, }; export const customFaker new Faker({ locale: [customLocale, de_CH, de, en, base], });这里的locale数组按顺序逐个检查第一个包含所需数据的区域生效customLocale自定义覆盖 →de_CH瑞士德语→de德语→en英语兜底→base如 emoji 等所有语言通用数据。构造函数还接受randomizer与seed选项详见 Faker 主类文档 与 FakerCore 实现。缺数据的两种错误与应对Missing Data 错误The locale data for category.entry are missing in this locale当前区域缺少该方法所需数据解决方式是向locale数组补充en、base等回退区域或向项目贡献缺失数据Not-Applicable 错误arent applicable to this locale该数据在当前区域客观上不存在如香港没有邮政编码此类数据被显式置为null以区分没想到和确实没有。此时直接添加回退不会生效因为null被视为已存在数据需要显式覆盖例如import { Faker, en, en_HK } from faker-js/faker; const faker new Faker({ locale: [{ location: { postcode: en.location.postcode } }, en_HK], }); console.log(faker.location.zipCode()); // 17551-0348可复现结果seed 与参考日期默认情况下 Faker 每次调用都产生不同结果测试场景通常需要可复现的随机序列此时使用seeddocs/guide/usage.mdfaker.seed(123); const firstRandom faker.number.int(); // 再次设置相同的 seed 会重置序列 faker.seed(123); const secondRandom faker.number.int(); console.log(firstRandom secondRandom); // true从 SimpleFaker 的 seed 实现 可以看出seed()支持传入单个数字或数字数组数组形态用于精细控制随机状态不传参时返回一个随机种子——这可以配合先随机跑、失败后按日志复现的测试策略。seed()的完整重载说明见 src/simple-faker.ts。相对日期方法需要固定参考日期部分方法如faker.date.past、faker.date.future、faker.date.recent、faker.date.soon、faker.git.commitEntry、faker.string.uuid({ version: 7 })基于今天生成相对时间仅设 seed 不足以复现。两种修正方式// 方式一单次调用指定参考日期 faker.date.soon({ refDate: 2023-01-01T00:00:00.000Z }); // 方式二为所有方法设置默认参考日期 faker.setDefaultRefDate(2023-01-01T00:00:00.000Z);setDefaultRefDate的默认值行为是() new Date()即每次调用取当前时间它也接受一个返回新Date的函数用于实现每次调用自动走一秒这类自定义时钟src/simple-faker.ts。该配置项在底层由 FakerConfig 中的defaultRefDate承载。另外请注意升级 Faker 版本后同一 seed 生成的数值可能变化因为底层数据姓名、单词列表等会随版本演进。实战用工厂函数生成复杂对象Faker 主要面向单值生成现实中的对象结构千差万别官方推荐的做法是自己编写工厂函数组合各模块docs/guide/usage.md。一个带类型定义的示例import type { SexType } from faker-js/faker; import { faker } from faker-js/faker; interface User { _id: string; avatar: string; birthday: Date; email: string; firstName: string; lastName: string; sex: SexType; subscriptionTier: free | basic | business; } function createRandomUser(): User { // 先生成 sex作为 firstName 的输入保证性别与名字一致 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]), }; }要点生成顺序影响数据合理性先取sex再传给它生成firstName并把姓名传入email得到比完全随机更协调的组合枚举字段用faker.helpers.arrayElement从白名单中选取而不是随机字符串支持覆写工厂函数可接收overwrites: PartialUser参数通过解构默认值实现便于构造特定测试样本如createRandomUser({ birthday: new Date(2124-10-20) })批量生成可用faker.helpers.multiple(createRandomUser, { count: 5 })README.md。轻量替代simpleFaker如果只需要 UUID、数字、字符串这类不依赖区域数据的值可改用simpleFaker避免加载至少 500KB 的区域数据docs/guide/usage.mdimport { simpleFaker } from faker-js/faker; const uuid simpleFaker.string.uuid();从 src/simple-faker.ts 的类注释可以看到SimpleFaker仅包含datatype、date不含month/weekday、helpers不含fake、location仅经纬度相关、number、string六个模块是测试环境生成纯随机值的轻量选择。Faker类本身继承自SimpleFaker并挂载全部主题模块src/faker.ts。更多资源与本地开发API 速查完整的模块与方法清单见 docs/api/index.md仓库内的 API 文档入口使用进阶相对日期、唯一值、随机器等主题见 docs/guide/usage.md 与 docs/guide/randomizer.md、docs/guide/unique.md本地文档开发仓库提供pnpm run docs:dev启动文档站、pnpm run docs:build构建文档package.json其中 API 文档与区域列表由pnpm run generate:api-docs/pnpm run generate:locales脚本从源码自动生成区域入口见 src/locale/index.ts 的生成说明测试验证仓库在 test/modules 下为每个模块配有快照与单元测试如 test/modules/person.spec.ts、test/modules/location.spec.ts可作为了解各方法行为边界的参考。Faker 以 MIT 许可发布可免费用于商业与非商业用途其开发由国际志愿者维护团队主导docs/index.md。掌握本文介绍的模块体系、本地化回退、seed 复现与工厂函数四个要点后你就能把 Faker 稳定地嵌入测试与开发流程成规模地生产既随机又合理的数据。【免费下载链接】fakerGenerate massive amounts of fake data in the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/faker/faker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表