- Faker.js v10.4.0 vừa phát hành tháng 3/2026, đạt 62.6 triệu lượt tải/tháng trên npm.
- Thư viện hỗ trợ 70+ locale và 25+ module dữ liệu, từ tên người đến giao dịch tài chính và địa chỉ crypto.
- MIT License, zero dependency, chạy cả trên Node.js lẫn browser.
- Sau biến cố maddler năm 2022, cộng đồng đã fork và xây dựng lại hoàn toàn bằng TypeScript.
TL;DR
Faker.js (@faker-js/faker) là thư viện JavaScript/TypeScript tạo dữ liệu giả nhưng thực tế cho mục đích test và phát triển. Version v10.4.0 (phát hành 23/3/2026) đang có 62.6 triệu lượt tải/tháng và 15.1k sao GitHub. Hỗ trợ 70+ locale, 25+ module dữ liệu, MIT License, zero dependency, viết hoàn toàn bằng TypeScript.

Vấn đề khi không có Faker
Khi viết test hoặc seed database dev, developer thường rơi vào một trong ba cái bẫy quen thuộc:
Hardcode dữ liệu cứng:
name: "John Doe",email: "test@test.com"- test pass nhưng không bao phủ được edge case như tên có dấu, email subdomain đặc biệt, hay số điện thoại quốc tế.Copy data từ production: tiện tay nhưng vi phạm quyền riêng tư người dùng, rủi ro GDPR và đôi khi còn commit lên Git.
Tự viết random string:
"asdf1234"không phải tên người, không phải địa chỉ thật - test pass nhưng UI trông như đang bị lỗi.
Faker giải quyết cả ba: sinh dữ liệu ngẫu nhiên nhưng có nghĩa, không chạm vào data thật, và hỗ trợ seed để reproduce chính xác khi debug.
Faker hoạt động như thế nào
Faker tổ chức API theo các module tương ứng với domain thực tế. Mỗi module chứa nhiều method trả về string, number, hoặc object đúng format:
import { faker } from '@faker-js/faker';
// Set seed để reproduce kết quả giữa các lần chạy
faker.seed(42);
const user = {
id: faker.string.uuid(),
name: faker.person.fullName(),
email: faker.internet.email(),
phone: faker.phone.number(),
address: faker.location.streetAddress(true),
company: faker.company.name(),
avatar: faker.image.avatar(),
bio: faker.person.bio(),
};
Ngoài ra, method faker.helpers.fake() cho phép kết hợp nhiều field theo cú pháp mustache, rất tiện để tạo template phức tạp:
const intro = faker.helpers.fake(
'{{person.firstName}} làm {{person.jobTitle}} tại {{company.name}}, {{location.city}}'
);
// Output: "Minh làm Senior Developer tại Bright Solutions, Ho Chi Minh City"
Cần tạo mảng dữ liệu nhanh? Dùng faker.helpers.multiple():
const users = faker.helpers.multiple(
() => ({ name: faker.person.fullName(), score: faker.number.int({ min: 0, max: 100 }) }),
{ count: 1000 }
);
25+ module, 70+ locale
Faker chia dữ liệu thành các module chuyên biệt. Một số module nổi bật:
Module | Ví dụ output |
|---|---|
| Tên đầy đủ, bio, job title, gender, prefix |
| Địa chỉ, zip code, tọa độ GPS, tên quốc gia |
| IBAN, số tài khoản, giao dịch, địa chỉ Bitcoin/Ethereum |
| Email, URL, IPv4/IPv6, password, username, MAC |
| Tên sản phẩm, giá, mô tả, danh mục, ISBN |
| Past, future, recent, between two dates |
| Mã chuyến bay, sân bay, ghế ngồi, hãng bay |
| Commit message, SHA hash, branch name |
| Tên nguyên tố hóa học, đơn vị đo lường |
| Tên món ăn, nguyên liệu, mô tả ẩm thực |
Với 70+ locale, chỉ cần đổi import để có dữ liệu bản địa hóa. Faker hỗ trợ tiếng Việt, Nhật, Hàn, Ả Rập, và nhiều ngôn ngữ khác:
import { fakerVI } from '@faker-js/faker';
const viName = fakerVI.person.fullName(); // Ví dụ: Nguyễn Thị Lan
const viCity = fakerVI.location.city(); // Ví dụ: Hà Nội
So sánh với các alternative
Faker không phải lựa chọn duy nhất, nhưng là lựa chọn phổ biến nhất:
Thư viện | Downloads/tháng | Điểm mạnh | Hạn chế |
|---|---|---|---|
@faker-js/faker | 62.6M | Toàn diện nhất, 70+ locale, TypeScript native | Node v20+ bắt buộc |
Chance.js | ~8M | Statistical distributions, nhẹ hơn | Ít data module |
@ngneat/falso | ~1.2M | Tree-shakeable, bundle nhỏ tốt cho browser | Ít locale |
MockJS | ~4M | Phổ biến ở thị trường Trung Quốc, template syntax | Ít maintained |
Nếu cần bundle nhỏ nhất cho browser app, @ngneat/falso thắng nhờ tree-shaking. Nếu dự án cần localization quốc tế đầy đủ hoặc các module đặc thù như airline, science, git, thì Faker là lựa chọn mặc định không cần bàn.
Giới hạn cần biết
Không nhất quán cross-field: city và zip code được sinh độc lập, không chắc khớp nhau trên bản đồ thật - phù hợp để test UI nhưng không nên dùng để kiểm tra geocoding logic.
Node.js v20+ bắt buộc từ v10: dự án cũ chạy Node 18 cần pin lại v9.x.
Phone number đúng format nhưng không phải số thật: không dùng được để test SMS delivery thực tế.
Mỗi run cho kết quả khác nhau nếu không set
faker.seed()- dễ gây flaky test nếu quên.
Bắt đầu và đọc thêm
Cài đặt nhanh:
npm install --save-dev @faker-js/faker
# hoặc
pnpm add -D @faker-js/faker
Faker được xây dựng lại từ cộng đồng sau biến cố năm 2022 khi maintainer gốc cố tình phá package. Đây là ví dụ điển hình về khả năng tự phục hồi của open-source: cộng đồng fork, rewrite bằng TypeScript, duy trì CI 99% coverage, và tăng trưởng từ 0 lên 62.6M downloads/tháng chỉ trong 4 năm.
Tài liệu đầy đủ tại fakerjs.dev. Repository: github.com/faker-js/faker. Thử trực tiếp trên StackBlitz playground không cần cài đặt.
Via: fakerjs.dev/guide, GitHub faker-js.
