Skip to content
On this page

Usage

Node.js

使用Faker非常简单,首先我们 import 导入包 @faker-js/faker.

js
import { faker } from '@faker-js/faker';

const randomName = faker.person.fullName(); // Rowan Nikolaus
const randomEmail = faker.internet.email(); // Kassandra.Haley@erich.biz

CommonJS 的使用方法是: require 引入包:

js
const { faker } = require('@faker-js/faker');

const randomName = faker.person.fullName(); // Rowan Nikolaus
const randomEmail = faker.internet.email(); // Kassandra.Haley@erich.biz

浏览器环境 Browser

html
<script type="module">
  import { faker } from 'https://cdn.skypack.dev/@faker-js/faker';

  // Caitlyn Kerluke
  const randomName = faker.person.fullName();

  // Rusty@arne.info
  const randomEmail = faker.internet.email();
</script>

温馨提示

使用浏览器非常适合实验👍. 然而,由于Faker用于生成假数据的所有字符串都打包进去,所以Faker是一个相对大的包,大小可能超过 5 MiB。请避免在正式环境中部署完整的Faker。

使用CDN 或 Deno

js
import { faker } from 'https://cdn.skypack.dev/@faker-js/faker';

const randomName = faker.person.fullName(); // Willie Bahringer
const randomEmail = faker.internet.email(); // Tomasa_Ferry14@hotmail.com

温馨提示

强烈建议在Deno中导入库时使用版本标记, e.g: import { faker } from "https://cdn.skypack.dev/@faker-js/faker@v7.4.0" 并添加 ?dts

使用类型定义导入: import { faker } from "https://cdn.skypack.dev/@faker-js/faker@v7.4.0?dts".

备选CDN链接

esm:

cjs:

支持 TypeScript

Faker支持开箱即用的TypeScript,因此您不必安装任何额外的软件包。

为了让Faker正常工作,您需要检查 compilerOptions 是否正确配置在 tsconfig 文件中:

json
{
  "compilerOptions": {
    "esModuleInterop": true,
    "moduleResolution": "Node"
  }
}

创建复杂对象

Faker主要为基本体生成值。

这是因为在现实世界中,大多数对象模式看起来完全不同。 因此,如果你想创建一个对象,你很可能需要为它编写一个工厂函数。 对于我们的示例,我们使用TypeScript来强类型化我们的模型。

我们将使用的模型如下所述

ts
import type { SexType } from '@faker-js/faker';

type SubscriptionTier = 'free' | 'basic' | 'business';

class User {
  _id: string;
  avatar: string;
  birthday: Date;
  email: string;
  firstName: string;
  lastName: string;
  sex: SexType; //说这里不应依赖于第三方库的类型
  subscriptionTier: SubscriptionTier;
}

正如你所看到的 User 用户模型看起来可能与代码库中的完全不同。 需要注意的一件事是 subscriptionTier 属性,因为它不仅仅是一个字符串,而是在 SubscriptionTier 类型 ('free' or 'basic' or 'business')。 此外,在实际场景中,您的模型不应依赖于第三方库的类型(如本例中的 SexType )。

让我们创建第一个用户工厂函数:

ts
import { faker } from '@faker-js/faker';

class User { ... }

function createRandomUser(): User {
  return {
    _id: faker.datatype.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'

让我们重构当前的代码:

ts
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.datatype.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 值作为参数, 但在我们的用例中,没有女性姓氏与男性姓氏不同的特殊情况。 首先,我们可以将这两个名称传递到 email 方法中生成。 这允许根据提供的参数使值更合理。

但我们可以再进一步。 在 _id 中使用 uuid 生成的值是唯一的, 但 email 则可能产生重复值,在一般情况下也足够使用。

Faker 也提供了能让 email 也返回唯一值的方法 :

ts
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.helpers.unique(faker.internet.email, [
    firstName,
    lastName,
  ]);

  return {
    _id: faker.datatype.uuid(),
    avatar: faker.image.avatar(),
    birthday: faker.date.birthdate(),
    email,
    firstName,
    lastName,
    sex,
    subscriptionTier: faker.helpers.arrayElement(['free', 'basic', 'business']),
  };
}

const user = createRandomUser();

通过使用唯一的助手函数包装Faker的电子邮件email函数,我们确保电子邮件email的返回值始终是唯一的。

恭喜你,你现在应该能够创建任何你想要的复杂对象了。让我们快乐的使用 Fakerjs 吧 🥳.

Released under the MIT License,本站仅做翻译,如有错误,请向我反馈 QQ:385858750