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 吧 🥳.