一个有故事的按需生成虚拟数据JS库,Faker

简介: 曾拥有 2.8 万 star 的**流行库**,原作者却"**删库跑路**",现在由**社区维护**。8名开发者参与其中,赋予其新的生命,同时也想让这个项目,从此变得更酷。

曾拥有 2.8 万 star 的流行库,原作者却"删库跑路",现在由社区维护。8名开发者参与其中,赋予其新的生命,同时也想让这个项目,从此变得更酷。

什么是Faker?

Faker 是一个用于生成虚拟数据的库。你可以用它来模拟数据,能极大方便测试、开发Mock数据等,广泛应用于以下场景:

  • 单元测试
  • 性能测试
  • 构建演示
  • 在没有完整后端的情况下工作

Faker 于 2004 年由 Jason Kohles 首次在 Perl 中实现,此后被移植到多种语言,包括RubyPythonJavaClojurePHPC#

后来 Marak Squires 实现了 NodeJs 版本,并投入了大量精力和时间来维护 Faker.js,该项目直至出事前在 npm 上每周有超过 280 万次下载,并有数以千计的开源库依赖它。

它曾发生了什么?现在又如何?#

Faker.js 项目由 Marak Squires 维护,他是早期有影响力的 Node 爱好者和专业人士,但由于其个人原因,2022 年 1 月 4 日 发生了流氓和恶意行为(简单讲就是作者资金出了问题,他觉得这个项目为许多公司甚至世界500强企业提供了帮助,所以希望大家能给他打款或者大公司能为他提供一份六位数年薪的工作,否则他不再维护该项目,结果最终还是向该库提交了恶意代码来作为收场),该事件引起了开源界不小的讨论,但无论该作者出于什么原因,此行为的结果直接导致了无数代码库崩溃,随即该包被删除,该项目被放弃。

后来一群工程师打算将 Faker 变成一个社区控制的开源项目,当主包被删除时,他们在 prod(生产环境)中使用 Faker,幸而没有受到波及,这八名工程师来自不同背景不同公司,共同参与着项目维护。

目前项目也已经有 7.2k Star,似乎正在渐渐步入正轨了,更新与issues处理上表现非常活跃,6天前才刚刚发布了新版本(7.5.0)。

到目前为止,团队做了什么?

  1. 创建了一个新的 Github 仓库:@faker-js/faker
  2. 组建一个由八名维护人员组成的团队。
  3. @faker-js/fakernpm 上发布了所有以前版本的 Faker。
  4. 发布了第 6 版 Alpha
  5. 几乎完成了向 TypeScript 的迁移,因此 definitelyTyped 不再需要维护其外部 @types/faker 包。
  6. 创建了一个公共 Twitter 帐户,用于与社区进行交流。
  7. 发布了第一个官方 Faker 文档 网站。
  8. 清理了 Prettier、CI、Netlify Deploy Previews 和 GitHub Actions 等工具。
  9. 完成了大量的问题分类和许多许多 PR 审查。

这无疑是庞大的工作量,可以看出团队是真心热爱这个项目,而他们也提到了另一位老哥 Jeff Beltran,他在过去 3 年中一直在维护一个非官方 faker.js 的文档项目,这也是 Faker 新官网的由来。

打开了 64 个拉取请求。 合并了34个。 44个问题被打开。 25个被关闭。

项目发展计划

目前开发团队表示完全打算扩展 Faker,不断发展它,让它不断变得更好

  1. ESM 的支持!
  2. Browserify => Rollup / Vite
  3. 改进测试基础设施
  4. typegen 类型生成文档
  5. 与 Faker 生态系统的现有维护者互动,在文档中建立交流广场
  6. 兼容 Node 18

可以看出团队打算对这个重生的库引入各种新技术,目前来看初步取得的成果不错,项目有不少贡献者,TypeScript 代码也几乎全覆盖了:

image.png

关于项目的资金安排等其他计划看不太懂,这里就不过多展开了。

下面简单讲讲项目如何使用吧。

安装

可以使用任意你喜欢的方式引入包:

npm install @faker-js/faker --save-dev

yarn add @faker-js/faker --dev

pnpm add @faker-js/faker --save-dev

用法

NodeJs 端:

import { faker } from '@faker-js/faker';
// or, if using CommonJS
// const { faker } = require('@faker-js/faker');

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

浏览器端:

<!-- Since v6 only type=module is supported -->
<script type="module">
  import { faker } from 'https://cdn.skypack.dev/@faker-js/faker';

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

  // Rusty@arne.info
  const randomEmail = faker.internet.email();
</script>
使用浏览器非常适合进行实验 👍。但是,由于 Faker 用于生成假数据的所有字符串, Faker 是一个大包。它被 > 5 MiB缩小了。 应该避免在 Web 应用程序中部署完整的 Faker。

CDN / Deno

js

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

const randomName = faker.name.findName(); // Willie Bahringer
const randomEmail = faker.internet.email(); // Tomasa_Ferry14@hotmail.com
强烈建议在 Deno 中导入库时使用版本标签,例如: 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

需要检查这些compilerOptions是否在你的tsconfig文件中正确设置:

json

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

然后像其他所有内容一样简单地导入它:

ts

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

如果出于任何原因想要之前的版本v6,您可以使用例如 src 文件夹中的文件@types/faker将声明重新绑定到@faker-js/faker包中。faker.d.ts

ts

// faker.d.ts
declare module '@faker-js/faker' {
  import faker from 'faker';
  export default faker;
}

stackblitz 在线试用 Demo
|
官方网址
|
Github 地址

开源不易,在这里对所有做社区维护工作的作者们表示敬意,也希望他们能越来越好,坚持怀揣那份对技术的热情!

相关文章
|
9月前
|
JavaScript 前端开发 Java
通义灵码 Rules 库合集来了,覆盖Java、TypeScript、Python、Go、JavaScript 等
通义灵码新上的外挂 Project Rules 获得了开发者的一致好评:最小成本适配我的开发风格、相当把团队经验沉淀下来,是个很好功能……
1543 103
|
7月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
8月前
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1277 58
|
9月前
|
JavaScript 前端开发 API
|
8月前
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
476 24
|
JavaScript 前端开发
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
如何在不影响性能的前提下使用JavaScript库来实现复杂的动画效果?
547 156
|
11月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
507 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
移动开发 JavaScript 前端开发
一些处理浏览器兼容性问题的JavaScript库
这些库在处理浏览器兼容性问题方面都有着各自的特点和优势,可以根据具体的需求和项目情况选择合适的库来使用,从而提高代码的兼容性和稳定性,为用户提供更好的体验。同时,随着浏览器技术的不断发展,还需要持续关注和学习新的兼容性解决方案。
408 58