@damien-thiesson/typeorm-fixtures-cli

中文文档
4.1.1发布于 2025/06/25MITTypeScriptCommonJS近 30 天下载 2087

TypeORM固定装置 CLI -- -- 生产中带有被禁用的假肢的叉子

中文使用文档
文档目录22 节
  1. 目录
  2. 安装
  3. 开发设置
  4. 示例
  5. 创建固定线
  6. 固定范围
  7. 定点参考
  8. 固定列表
  9. 调用同步和同步方法
  10. 处理关系
  11. 高级指南
  12. 参数
  13. Faker 数据
  14. EJS 调制
  15. 装入处理器
  16. 实体Schemas
  17. 使用量
  18. 程序装入固定装置
  19. 样本
  20. 贡献者
  21. 代码贡献者
  22. 财政捐助者

TypeORM 定着克力

CircleCI GitHub CI OpenCollective Coverage Status Version License Backers on Open Collective Sponsors on Open Collective

依赖 伪造者.js,打字机固定-cli允许您创建一吨固定/假数据,用于开发或测试您的项目。 它为您提供了一些基本的工具,使得您能够非常容易地以可读和易于编辑的方式生成受约束的复杂数据,这样,您的团队中的每个人都可以在需要时来调整固定装置.

目录

安装

国家预防机制

npm install typeorm-fixtures-cli --save-dev

雅伦

yarn add typeorm-fixtures-cli --dev

开发设置

# install dependencies
npm install

# build dist files
npm run build

示例

fixtures/Comment.yml

entity: Comment
items:
  comment{1..10}:
    fullName: '{{name.firstName}} {{name.lastName}}'
    email: '{{internet.email}}'
    text: '{{lorem.paragraphs}}'
    post: '@post*'

fixtures/Post.yml

entity: Post
items:
  post1:
    title: '{{name.title}}'
    description: '{{lorem.paragraphs}}'
    user: '@user($current)'
  post2:
    title: '{{name.title}}'
    description: '{{lorem.paragraphs}}'
    user: '@user($current)'

fixtures/User.yml

entity: User
items:
  user1:
    firstName: '{{name.firstName}}'
    lastName: '{{name.lastName}}'
    email: '{{internet.email}}'
    profile: '@profile1'
    __call:
      setPassword:
        - foo
  user2:
    firstName: '{{name.firstName}}'
    lastName: '{{name.lastName}}'
    email: '{{internet.email}}'
    profile: '@profile2'
    __call:
      setPassword:
        - foo

fixtures/Profile.yml

entity: Profile
items:
  profile1:
    aboutMe: <%= ['about string', 'about string 2', 'about string 3'].join(", ") %>
    skype: skype-account>
    language: english
  profile2:
    aboutMe: <%= ['about string', 'about string 2', 'about string 3'].join(", ") %>
    skype: skype-account
    language: english

创建固定线

这个库最基本的功能是将平面的 Yaml 文件变成对象

entity: User
items:
  user0:
    username: bob
    fullname: Bob
    birthDate: 1980-10-10
    email: [email protected]
    favoriteNumber: 42

  user1:
    username: alice
    fullname: Alice
    birthDate: 1978-07-12
    email: [email protected]
    favoriteNumber: 27

固定范围

第一步是让您创建许多对象的副本,以便去除 Yaml 文件的复制.

您可以在固定名称中定义一个范围:

entity: User
items:
  user{1..10}:
    username: bob
    fullname: Bob
    birthDate: 1980-10-10
    email: [email protected]
    favoriteNumber: 42

现在它将生成10个用户,其中ID用户1到用户10. 不错 但我们只有10个 名字、用户名和电子邮件 还不怎么漂亮.

定点参考

也可以指定一个参考,指以前创建的固定装置列表:

entity: Post
items:
  post1:
    title: 'Post title'
    description: 'Post description'
    user: '@user1'

固定列表

也可以指定一个数值列表,而不是一个范围:

entity: Post
items:
  post{1..10}:
    title: 'Post title'
    description: 'Post description'
    user: '@user($current)'

如果是范围(例如用户{1.10}), ($current) 将返回 1 用户, 2 用户等.

当前迭代可以作为字符串值 :

entity: Post
items:
  post{1..10}:
    title: 'Post($current)'
    description: 'Post description'

Post($current) 将返回员额1,员额2等.

您可以使用基本的数学操作符来突变此输出 :

entity: Post
items:
  post{1..10}:
    title: 'Post($current*100)'
    description: 'Post description'

Post($current*100) 将返回 Post 100 用于员额 1, Post 200 用于员额 2等.

调用同步和同步方法

有时虽然您需要调用一种方法来初始化一些更多的数据,但您可以像属性一样这样做,但使用方法名称并给出一系列参数.

entity: User
items:
  user{1..10}:
    username: bob
    fullname: Bob
    birthDate: 1980-10-10
    email: [email protected]
    favoriteNumber: 42
    __call:
      setPassword:
        - foo

处理关系

entity: User
items:
  user1:
    # ...

entity: Group
items:
  group1:
    name: '<{names.admin}>'
    owner: '@user1'
    members:
      - '@user2'
      - '@user3'

如果您想要创建十个用户和十个组, 并且每个用户拥有一个组, 您可以使用 ($current) 当使用固定区域时,用每个迭代的当前编号替换:

entity: User
items:
  user1:
    # ...

entity: Group
items:
  group{1..10}:
    name: 'name'
    owner: '@user($current)'
    members:
      - '@user2'
      - '@user3'

如果您想要随机的用户而不是固定的用户,可以使用通配符定义引用:

entity: User
items:
  user1:
    # ...

entity: Group
items:
  group{1..10}:
    name: 'name'
    owner: '@user*'
    members:
      - '@user2'
      - '@user3'

或者说

entity: User
items:
  user1:
    # ...

entity: Group
items:
  group{1..10}:
    name: 'name'
    owner: '@user{1..2}' # @user1 or @user2
    members:
      - '@user2'
      - '@user3'

高级指南

参数

您可以设置全局参数, 这些参数将插入任何地方, 用于帮助可读性 。 例如:

entity: Group
parameters:
  names:
    admin: Admin
items:
  group1:
    name: '<{names.admin}>' # <--- set Admin
    owner: '@user1'
    members:
      - '@user2'
      - '@user3'

Faker 数据

此图书馆与 伪造者.js 图书馆。 使用QQfooQ可以调用Faker数据提供者生成随机数据.

让我们把静态的bob用户变成随机的条目:

entity: User
items:
  user{1..10}:
    username: '{{internet.userName}}'
    fullname: '{{name.firstName}} {{name.lastName}}'
    birthDate: '{{date.past}}'
    email: '{{internet.email}}'
    favoriteNumber: '{{datatype.number}}'
    __call:
      setPassword:
        - foo

禁用标签

如果您需要使用字词 {{...}} 在定着器中(例如,Handlebars模板),可以禁用Faker处理:

每个固定 :

entity: EmailTemplate
disableFaker: true
items:
  welcome:
    subject: 'Welcome {{firstName}}'
    body: 'Hello {{firstName}} {{lastName}}, welcome to {{companyName}}'

全球:

const parser = new Parser({ disableFaker: true });
const builder = new Builder(dataSource, parser, false);

EJS 调制

此图书馆与 EJS (英语)

entity: Profile
items:
  profile1:
    aboutMe: <%= ['about string', 'about string 2', 'about string 3'].join(", ") %>
    skype: skype-account>
    language: english

装入处理器

处理器允许您在对象被坚持之前和/或之后处理它们 。 处理者必须执行: IProcessor

import { IProcessor } from 'typeorm-fixtures-cli';

以下是一个例子:

processor/UserProcessor.ts

import { IProcessor } from 'typeorm-fixtures-cli';
import { User } from '../entity/User';

export default class UserProcessor implements IProcessor<User> {
  preProcess(name: string, object: any): any {
    return { ...object, firstName: 'foo' };
  }

  postProcess(name: string, object: { [key: string]: any }): void {
    object.name = `${object.firstName} ${object.lastName}`;
  }
}

固定配置 fixtures/user.yml

entity: User
processor: ../processor/UserProcessor
items:
  user1:
    firstName: '{{name.firstName}}'
    lastName: '{{name.lastName}}'
    email: '{{internet.email}}'

通用JS 的替代 Javascript语法

如果您需要运行CommonJS下的固定装置,并且使用加载处理器的打字程序有问题,这个替代示例应该为您工作:

processor/UserProcessor.js


class UserProcessor {
  preProcess(name, obj) {
    return { ...obj, firstName: 'foo' };
  }

  postProcess(name, obj) {
    obj.name = `${obj.firstName} ${obj.lastName}`;
  }
}

module.exports = { default: UserProcessor }

实体Schemas

如果您在打字机中使用实体Schemas, 您可能会遇到问题 __call 由于实体对象的构造方式,在打字机-固定中具有特性.

作为工作轮廓,您应该能够复制同样的方法功能 装入处理器 预处理方法(注意通过的对象将是普通对象,而不是你的实体对象).

使用量

Usage: fixtures load [options] <path> Fixtures folder/file path

Use -h or --help to show details of options: fixtures load -h
如果实体文件为打字符( 如 类型(中文(简体) )

这个 CLI 工具是用 Javascript 写成的, 要运行在节点上. 如果您的实体文件在打字符中, 在使用 CLI 之前, 您需要将其转换为 javascript 。 只需使用javascript即可跳过本节.

您可在您的工程中设置 ts- 节点, 以方便操作如下 :

安装 ts- 节点 :

npm install ts-node --save-dev

在 package.json 的脚本部分下添加打字机命令

"scripts": {
    ...
    "fixtures": "fixtures-ts-node-commonjs"
}

关于无害环境管理项目,增加以下内容:

"scripts": {
    ...
    "fixtures": "fixtures-ts-node-esm"
}
需要多个额外的模块

如果一次使用多个模块(如ts-node和tsconfig-paths) 您有能力要求这些模块带有多个需要的旗帜。 例如:

fixtures load ./fixtures --dataSource=./dataSource.ts --sync --require=ts-node/register --require=tsconfig-paths/register

程序装入固定装置

虽然打字机固定-cli是打算用作CLI,但仍然可以装入 在您的程序中通过 API 设置 .

例如,下面的代码片段会加载所有已存在于 ./fixtures 目录 :

import * as path from 'path';
import { Builder, fixturesIterator, Loader, Parser, Resolver } from 'typeorm-fixtures-cli/dist';
import { createConnection, getRepository } from 'typeorm';
import { CommandUtils } from 'typeorm/commands/CommandUtils';

const loadFixtures = async (fixturesPath: string) => {
  let dataSource: DataSource | undefined = undefined;

  try {
    dataSource = await CommandUtils.loadDataSource(dataSourcePath);
    await dataSource.initialize();
    await dataSource.synchronize(true);

    const loader = new Loader();
    loader.load(path.resolve(fixturesPath));

    const resolver = new Resolver();
    const fixtures = resolver.resolve(loader.fixtureConfigs);
    const builder = new Builder(connection, new Parser(), false);

    for (const fixture of fixturesIterator(fixtures)) {
      const entity: any = await builder.build(fixture);
      await dataSource.getRepository(fixture.entity).save(entity);
    }
  } catch (err) {
    throw err;
  } finally {
    if (dataSource) {
      await dataSource.destroy();
    }
  }
};

loadFixtures('./fixtures')
  .then(() => {
    console.log('Fixtures are successfully loaded.');
  })
  .catch((err) => {
    console.log(err);
  });

样本

贡献者

代码贡献者

这个项目的存在要归功于所有作出贡献的人贡献[ [ ] [ ] ]. ].

财政捐助者

成为财政贡献者并帮助我们维持我们的社区贡献[ . ]

个人

组织

支持这个项目与你的组织。 你的标志会在这里出现 链接到你的网站。 [贡献[ . ]

麻省理工学院 伊戈尔·奥尼琴科

版本与发布记录

@damien-thiesson/typeorm-fixtures-cli 共发布 1 个版本,首次发布于 2025/06/25;过去 12 个月发布了 0 个版本。

版本发布日期距今
4.1.1latest2025/06/251.4 年前

关于 @damien-thiesson/typeorm-fixtures-cli 的常见问题

@damien-thiesson/typeorm-fixtures-cli 是什么?

TypeORM固定装置 CLI -- -- 生产中带有被禁用的假肢的叉子

如何安装 @damien-thiesson/typeorm-fixtures-cli?

在项目目录运行 npm install @damien-thiesson/typeorm-fixtures-cli,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:typeorm(^0.3.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 fixtures、fixtures-ts-node-commonjs、fixtures-ts-node-esm,可以用 npx fixtures 直接运行。

@damien-thiesson/typeorm-fixtures-cli 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@damien-thiesson/typeorm-fixtures-cli 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@damien-thiesson/typeorm-fixtures-cli 可以商用吗?

@damien-thiesson/typeorm-fixtures-cli 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@damien-thiesson/typeorm-fixtures-cli 的下载量有多少?

根据 npm 官方下载统计,@damien-thiesson/typeorm-fixtures-cli 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,087 次,日均约 70 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@damien-thiesson/typeorm-fixtures-cli 还在维护吗?

最新版本 4.1.1 发布于 2025/06/25(1.4 年前);至今共发布 1 个版本,其中过去 12 个月发布了 0 个;首次发布于 2025/06/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。