faker-js 的 v7 路线图:Cleanup Improvements 阶段的破坏性变更与版本演进
2026/9/14 11:14:54 网站建设 项目流程

faker-js 的 v7 路线图:Cleanup & Improvements 阶段的破坏性变更与版本演进

【免费下载链接】fakerGenerate massive amounts of fake data in the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/faker/faker

本篇文章围绕 faker-js 官方路线图中的 v7 版本规划 展开,系统梳理 v7 作为维护方接管后首个引入“结构性破坏变更”的版本所包含的六大任务(移除弃用、移除默认导出、目标 ES2020、放弃 Node v12、重组源码目录、新增特性),并结合仓库内的 CHANGELOG.md、源码导出结构 与弃用机制实现 进行源码级印证。读完本文,你将理解 faker-js 从 v6 到 v7 的演进逻辑、v7.0 破坏性变更的具体内容与影响,以及 v7.x 各次小版本迭代带来的核心能力,为评估或迁移到后续版本提供依据。

一、背景:v7 在整体路线图中的位置

在 路线图首页 中,faker-js 将版本规划分为三档:即将发布版本(v9)、当前版本(v8)、历史版本(v7、v6)。v7 属于"Previous Versions"(历史版本),其定位是Cleanup & Improvements(清理与改进)

根据 v6 路线图,v6 阶段完成了四件奠基性工作:

  • 用 TypeScript 重写项目;
  • 更新依赖并自动化该流程;
  • 新增/扩展构建流水线;
  • 为大部分模块与方法编写 JSDoc,并上线在线文档网站。

v6 的收尾工作(v6.1/v6.2/v6.3)则集中在修复实现与数据中的 bug、标准化方法参数、弃用重复方法、扩充单元测试、补齐缺失 locale、完善文档。

v7 正是在这一基础上提出的“第一次带破坏性变更的发布”。原路线图文档明确指出:“It will be the first release with small breaking changes since we maintain it.”(自项目被维护以来,这是第一个包含小幅破坏性变更的发布)。换句话说,v6 负责“把地基打牢”,v7 负责“把 v6 挖下的坑填掉并整理内部结构”,为后续更激进的架构调整(如 v8 的模块重排、v9 的 Tree Shaking)铺路。

二、v7.0:结构性破坏性变更(Structurally Breaking Changes)

v7.0 的核心任务清单共六项,原文档表述为:

  • Remove deprecations(移除弃用)
  • Remove faker default export(移除 faker 默认导出)
  • Target es2020(编译目标定为 ES2020)
  • Drop Node v12 support(放弃 Node v12 支持)
  • Reorganize source folder(重组源码目录)
  • More features(更多特性)

CHANGELOG.md 中 v7.0.0(2022-05-23 发布)的 Breaking Changes 段落与上述清单一一对应,还额外列出一条构建层面的变更"get rid of export ="(移除export =语法)。这说明 v7.0 的破坏面覆盖了 API 层、运行时环境层和构建产物层三个维度。下面逐项展开。

2.1 移除 v6 中已弃用的方法(Remove deprecations)

v6 系列为了过渡,大量使用了“弃用(deprecation)”策略:旧方法保留但打印警告,同时给出替代方案。v7.0 则按计划将这些弃用项彻底删除(对应 PR #916 "remove deprecations")。

当前仓库中的弃用机制实现 src/internal/deprecated.ts 可以帮我们还原这套约定的完整形态。该模块定义了DeprecatedOptions接口,包含四个字段:

字段含义
deprecated被弃用方法的完整名称,遵循faker.[module].[function]()语法
proposed推荐的替代方案
since自哪个 semver 版本(如6.1)开始弃用
until计划在哪个 semver 版本(如7.0)移除

生成的警告消息格式为:

[@faker-js/faker]: faker.xxx.yyy() is deprecated since v6.1 and will be removed in v7.0. Please use faker.zzz() instead.

文件中还有一条关键注释:“A deprecation should never be done in a patch.”(弃用绝不应在补丁版本中引入),即弃用只允许在 minor 或 major 版本中引入。这套“since标记、until预告移除时间、proposed给出替代”的约定,正是 v7.0 “移除弃用”能平稳执行的前提:v6 已经在警告中预告了移除版本,用户有充足时间迁移;到了 v7.0,弃用项直接删除,调用即报错,不再有警告缓冲。

对升级者而言,这意味着升级到 v7 前应先运行在 v6 下,收集所有弃用警告并逐一按proposed替换,否则 v7 下相关代码会直接编译失败或运行时报错。

2.2 移除 faker 默认导出(Remove faker default export)

v7.0 之前,包提供默认导出(export default faker)。v7.0 移除了默认导出,要求用户必须使用具名导入。这一变更(PR #799)也连带完成了 "get rid of export ="(PR #849),统一了模块导出风格,为后续 v8 的多实例化、v9 的 Tree Shaking 等打包优化扫清了障碍。

从当前仓库的 src/index.ts 可以清楚看到这一设计延续至今的结果:文件末尾通过export { fakerEN as faker } from './locale';导出名为faker的具名实例(默认 locale 为英文),同时导出Faker类、SimpleFaker、各模块类型与全部 locale,但没有任何export default

v7 起推荐的用法即:

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

而非 v6 时代的import faker from '@faker-js/faker'

2.3 编译目标定为 ES2020(Target es2020)

v7.0 将构建产物的编译目标从更低的 ECMAScript 版本提升到 ES2020(PR #848)。这是"Small breaking changes"的典型代表:代码层面无需改动,但运行时环境必须具备 ES2020 特性支持(例如BigIntPromise.allSettled、可选链与空值合并等语法能力),否则产物无法在旧环境中直接运行。

这一决策的影响可以参考当前仓库的 tsconfig.json:如今编译目标已进一步放宽为"target": "ESNext",说明项目在 v7 定下 ES2020 基线后,后续版本仍在持续前移目标,旧浏览器/旧运行时若不升级将逐步失去兼容性。

2.4 放弃 Node v12 支持(Drop Node v12 support)

v7.0 移除了对 Node.js v12 的支持(PR #850),将受支持的 Node 版本基线抬高。这在当时意味着:

  • 运行环境为 Node 12 的用户无法再安全升级;
  • 项目自身可以放心使用 Node 14+ 的运行时能力与依赖生态。

对照当前 package.json 的engines字段:

"engines": { "node": "^22.13.0 || ^23.5.0 || >=24.0.0", "npm": ">=10" }

可以看到这种“随大版本抬高 Node 基线”的做法被一直延续:如今的 v10 已经要求 Node 22+。因此,升级任何 major 版本前都应先核对目标 Node 版本是否满足engines要求——这条经验在 v7 就已确立。

2.5 重组源码目录(Reorganize source folder)

v7.0 对源码目录结构进行了重组(PR #909),目的是让模块边界更清晰、依赖关系更直观,为后续继续扩展模块化能力打基础。

这一改动的最终形态可以从当前仓库的 src 目录 中观察:顶层被划分为职责明确的若干子目录,例如:

  • src/modules/:各业务模块(airline、animal、person、location、finance……);
  • src/locale/:预构建的 locale 入口(enzh_CN等);
  • src/locales/:各 locale 的原始定义数据;
  • src/definitions/:locale 定义的类型与数据结构;
  • src/internal/:内部工具(如弃用机制、locale 代理、梅森旋转随机数);
  • src/utils/:对外暴露的通用工具(如mergeLocales);
  • src/distributors/:随机数分布器。

这种“定义数据 / 模块实现 / 预构建实例 / 内部工具”分离的结构,正是 v8 模块重排(Module Re-Shuffling)与 v9 Tree Shaking 得以实施的组织基础。从源码结构看,v7 的目录重组是后续所有模块化工作的第一个台阶。

2.6 更多特性(More features)

除了破坏性变更,v7.0 也携带了一批新特性。根据 CHANGELOG.md 的 v7.0.0 Features 段落,主要包括:

  • 新增 color 模块(PR #801),统一颜色生成能力;
  • date.birthdate():按年龄范围生成出生日期(PR #962);
  • 重新实现datatype.bigInt(),原生支持大整数(PR #791);
  • internet.httpStatusCode():随机生成 HTTP 状态码(PR #945);
  • casing 选项:多处方法新增大小写控制(PR #955);
  • 本地化模板address.cityaddress.street改用 locale 内的模板生成(PR #948、#966),让城市/街道名称更贴合各语言习惯;
  • faker.fake()支持直接传入 locale 定义(PR #884);
  • 法语(fr、fr_CH)locale 的扩充,以及helpers.arrayElements空数组处理等修复。

v7.0.1(同为 2022-05-23)则是紧随其后的补丁版,主要修复了 NodeNext/Node16 模块解析下的类型导出回归问题(CHANGELOG.md)。

三、v7.x:持续改进的小版本演进

原路线图在 v7.0 之外,还规划了一个持续改进的分支“v7.x / Further improvements”,并列出 v7.1.0 至 v7.5.0 的发布记录。结合 CHANGELOG.md 的实际记录,v7 系列实际共发布了 7 个版本(v7.0.0、v7.0.1、v7.1.0、v7.2.0、v7.3.0、v7.4.0、v7.5.0、v7.6.0),其中 v7.6.0 是文档编写时尚未列出的版本。各版本要点整理如下:

版本发布日期核心内容
v7.1.02022-05-25新增music.songName()、en_CA 城市名;修复 Luhn 校验算法;支持 Node16/NodeNext 模块解析
v7.2.02022-06-06新增 science 模块;loremflickr 图片 URL 全面改用 https(软破坏性变更,移除image.imageUrl的最后一个参数);新增德语形容词
v7.3.02022-06-20支持 Webpack v4(下调编译目标);未知 locale 直接抛错;hacker.abbreviation()新增缩写;改进挪威语翻译
v7.4.02022-08-08image 新增 via.placeholder 服务商;system.fileName()支持扩展名数量;新增system.networkInterface();en locale 新增啮齿类动物;新增 jp locale
v7.5.02022-08-29name.sexType()将性别生成从 gender 中拆出;新增system.cron()datatype.hexadecimal签名调整;公司名格式模板迁移至 locale
v7.6.02022-10-12finance.bic()支持 branch code;science 模块在 en locale 中新增更多单位;导出模块接口类型;改善默认种子初始化

可以看到 v7.x 的演进节奏非常稳健,主要围绕三类工作:

  1. 新模块/新方法:science 模块(v7.2)、system.cron()system.networkInterface()music.songName()name.sexType()等,直接为 v8 的模块化(如 String/Number 独立成模块)积累了模块划分经验;
  2. 数据与 locale 完善:几乎每个版本都伴随多语言数据的新增与修正(fr/fr_CH、de、pl、he、ja、id_ID、zh_CN 等),中文用户熟悉的zh_CN男性名数据正是在 v7.6 中补全的;
  3. 工程化修复:Webpack v4 兼容、Node16/NodeNext 类型导出、loremflickr HTTPS 化、未知 locale 抛错等,持续打磨包的分发质量与运行时行为。

四、v7 与后续版本的衔接

v7 完成“清理与改进”后,路线图继续向前推进:

  • v8 - Make Faker Handier:目标是让 faker 更轻量、更灵活,包括完成模块重排、将 String/Number 方法移入独立模块、把 Name 模块改名为 Person、把 Address 模块改名为 Location、消除模块循环依赖、统一函数参数与默认值、重写 image 模块,并在 v8.1 拆分 Faker 类(引入SimpleFaker,避免仅为生成字符串/数字而打包整个 locale)。
  • v9 - Tree Shaking:进一步推进模块化以支持摇树优化。

从当前仓库源码可以确认,v8/v9 规划的目标多数已落地:personlocation模块名已成为现实(见 src/faker.ts 中的模块列表),SimpleFakersimpleFaker独立导出(见 src/index.ts),Faker类现在接收FakerOptions(含localerandomizerconfigseed)并支持数组形式的 locale 回退链(src/faker.ts)。而这一切的起点,正是 v7 对 API、构建与源码结构的“清洗”。

五、升级到 v7 的实操要点

综合原路线图与仓库证据,从 v6 升级到 v7 时可以按以下清单自查:

  1. 替换默认导入:将所有import faker from '@faker-js/faker'改为import { faker } from '@faker-js/faker',同时检查是否有export =风格的导入用法;
  2. 清理弃用调用:升级前在 v6 环境运行应用/测试,收集所有is deprecated控制台警告,按Please use ... instead提示替换,重点检查已被列入移除计划的 API;
  3. 核对运行环境:Node 版本需高于 v12,且运行环境需支持 ES2020 语法(较新的浏览器与 Node 14+ 均满足);
  4. 关注行为变更:如image.imageUrl的参数变化(v7.2)、未知 locale 由静默回退改为抛错(v7.3)、datatype.hexadecimal签名调整(v7.5)等,建议阅读 CHANGELOG.md 中每个版本的 "⚠ BREAKING CHANGES" / "⚠ SOFT BREAKING CHANGES" 段落;
  5. 善用新能力:升级后可立即使用 color 模块、date.birthdate()internet.httpStatusCode()、science 模块、system.cron()等 v7 新增能力。

六、总结

v7 在 faker-js 的演进史上是一个承上启下的版本:向上,它兑现了 v6 铺垫的技术债清理承诺,首次以破坏性变更的方式移除弃用 API、统一导出形态、抬高运行环境基线;向下,它为 v8 的模块重排与 v9 的 Tree Shaking 奠定了源码组织与构建基础。对于使用者而言,v7 的价值不仅在于一批新特性,更在于它确立的“弃用—预告—移除”节奏和“版本规划文档先行”的开发方式——这正是理解整个项目后续路线图的一把钥匙。

【免费下载链接】fakerGenerate massive amounts of fake data in the browser and node.js项目地址: https://gitcode.com/GitHub_Trending/faker/faker

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询