# @bitbean/generate-sequelize 中文文档

规范地址：https://npmcn.com/package/%40bitbean/generate-sequelize/

版本：1\.3\.1
npm 元数据更新时间：2026-09-17T22:16:09.118Z
中文译文更新时间：2026-11-08T04:01:31.230Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40bitbean/generate-sequelize
原文对照：https://npmcn.com/package/%40bitbean/generate-sequelize/?lang=original
项目主页：https://github.com/bitbean/generate-sequelize#readme
源码仓库：https://github.com/bitbean/generate-sequelize

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：152 kB，59 个文件
- TypeScript 类型：包内自带
- 运行依赖：5 个
- peer 依赖：sequelize \>3\.30\.0
- 首次发布：2025-04-23T21:12:57.315Z
- 最新版本发布：2026-07-28T03:10:34.526Z
- 近 30 天下载量：9108（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：9（近 12 个月 3 个）

## 中文简介

复制模型的代码生成器

## 安装

```sh
npm install @bitbean/generate-sequelize
```

也可以使用：`pnpm add @bitbean/generate-sequelize`、`yarn add @bitbean/generate-sequelize`、`bun add @bitbean/generate-sequelize`

## README

# 生成序列化模型

这是一个命令行工具,它从一个数据库的 schema 中生成序列模型.

## 安装

`npm install generate-sequelize -D`

## 使用量

`npx generate-sequelize [path-to-config (default: .generate-sequelize.cjs)]`

对于 PostgreSQL , 生成的属性遵循每个列的数据库 `ordinal_position`,因此重复生成保存数据库字段顺序.

### AI 代理指令

设定 `generatedWarnings: true` 在生成器配置中添加简洁警告 以 `DO NOT EDIT`。 。 。 .

您也可以添加匹配的寄存器级指导到 `AGENTS.md`数字 :

```
npx generate-sequelize setup-agents
```

默认情况下,此选项在 `./AGENTS.md`。在需要时通过另一个文件作为第二个参数:

```
npx generate-sequelize setup-agents path/to/AGENTS.md
```

命令保存所有外部内容 `<!-- generate-sequelize:start -->` 财务报告和审定财务报表 `<!-- generate-sequelize:end -->`,并安全地反复运行.

## 示例配置

```
// ./.generate-sequelize.cjs
/*** @type {import("generate-sequelize").GeneratorOptions} */
module.exports = {
    targetLib: "sequelize",
    database: "database",
    username: "username",
    password: "password",
    host: "localhost",
    dialect: "mysql",
    directory: "models",
    generatedWarnings: true,
    joinTables: ["user_roles"],
    replacements: [[/as: "medium"/g, 'as: "media"']],
    prettierOptions: {
        singleQuote: true,
        trailingComma: "all",
        bracketSpacing: true,
        tabWidth: 4,
    }
}
```

## 示例输出

```
// models/users.ts
/* auto-generated imports */
import { phones } from './phones';
import { user_roles } from './user_roles';
/* auto-generated imports */
import {
    /* auto-generated sequelize imports */
    /* auto-generated sequelize imports */
    Model,
    Sequelize,
    Optional,
    DataTypes,
} from 'sequelize';

type usersAttributeKeys =
    /* auto-generated attributes */
    | 'id'
    | 'email'
    | 'first_name'
    | 'last_name'
    | 'created_at'
    | 'updated_at'
    | 'deleted_at';
/* auto-generated attributes */

export type usersAttributes = Pick<users, usersAttributeKeys>;

export type usersOptionalAttributes =
    /* auto-generated optional attributes */
    'id';
/* auto-generated optional attributes */

export type usersCreationAttributes = Optional<
    usersAttributes,
    usersOptionalAttributes
>;

export class users
    extends Model<usersAttributes, usersCreationAttributes>
    implements usersAttributes
{
    /* auto-generated properties */
    declare id: number;
    declare email: string;
    declare first_name: string;
    declare last_name: string;
    declare created_at?: Date;
    declare updated_at?: Date;
    declare deleted_at?: Date;
    /* auto-generated properties */

    /* auto-generated associations */
    declare phones: phones[];
    declare user_roles: user_roles[];
    /* auto-generated associations */

    static initModel(sequelize: Sequelize): typeof users {
        return users.init(
            {
                /* auto-generated definitions */
                id: {
                    type: DataTypes.INTEGER,
                    allowNull: false,
                    primaryKey: true,
                    autoIncrement: true,
                },
                email: {
                    type: DataTypes.STRING,
                    allowNull: false,
                },
                first_name: {
                    type: DataTypes.STRING,
                    allowNull: false,
                },
                last_name: {
                    type: DataTypes.STRING,
                    allowNull: false,
                },
                created_at: {
                    type: DataTypes.DATE,
                    allowNull: true,
                    defaultValue: DataTypes.NOW,
                },
                updated_at: {
                    type: DataTypes.DATE,
                    allowNull: true,
                },
                deleted_at: {
                    type: DataTypes.DATE,
                    allowNull: true,
                },
                /* auto-generated definitions */
            },
            {
                sequelize,
                indexes: [
                    /* auto-generated indexes */
                    {
                        name: 'users_email_key',
                        unique: true,
                        fields: ['email'],
                    },
                    { name: 'users_first_name', fields: ['first_name'] },
                    { name: 'users_last_name', fields: ['last_name'] },
                    { name: 'users_pkey', unique: true, fields: ['id'] },
                    /* auto-generated indexes */
                ],
            },
        );
    }
}

```

如果一个文件不存在, 它将使用默认模板创建 。 如果确实存在,它将覆盖所有标志如下的区域:

```
/* start auto-generated {{regionName}} — DO NOT EDIT */
// all code inside here will be overwritten
/* end auto-generated {{regionName}} */
```

因此,如果你想加入一个模型,可以如下:

```
// models/users.ts
/* auto-generated imports */
import { phones } from './phones';
import { user_roles } from './user_roles';
/* auto-generated imports */
import {
    /* auto-generated sequelize imports */
    /* auto-generated sequelize imports */
    Model,
    Sequelize,
    Optional,
    DataTypes,
} from 'sequelize';
import { tasks } from './tasks'; // will not be overwritten

type usersAttributeKeys =
    | 'fullName' // will not be overwritten
    /* auto-generated attributes */
    | 'id'
    | 'email'
    | 'first_name'
    | 'last_name'
    | 'created_at'
    | 'updated_at'
    | 'deleted_at'
/* auto-generated attributes */
    | 'hasTasks'; // will not be overwritten

export type usersAttributes = Pick<users, usersAttributeKeys>;

export type usersOptionalAttributes =
    | 'hasTasks' // will not be overwritten
    /* auto-generated optional attributes */
    | 'id';
/* auto-generated optional attributes */

export type usersCreationAttributes = Optional<
    usersAttributes,
    usersOptionalAttributes
>;

export class users
    extends Model<usersAttributes, usersCreationAttributes>
    implements usersAttributes
{
    /* auto-generated properties */
    declare id: number;
    declare email: string;
    declare first_name: string;
    declare last_name: string;
    declare created_at?: Date;
    declare updated_at?: Date;
    declare deleted_at?: Date;
    /* auto-generated properties */

    declare fullName: string; // will not be overwritten
    declare hasTasks?: string; // will not be overwritten

    /* auto-generated associations */
    declare phones: phones[];
    declare user_roles: user_roles[];
    /* auto-generated associations */

    declares tasks: tasks[]; // will not be overwritten

    static initModel(sequelize: Sequelize): typeof users {
        return users.init(
            {
                /* auto-generated definitions */
                id: {
                    type: DataTypes.INTEGER,
                    allowNull: false,
                    primaryKey: true,
                    autoIncrement: true,
                },
                email: {
                    type: DataTypes.STRING,
                    allowNull: false,
                },
                first_name: {
                    type: DataTypes.STRING,
                    allowNull: false,
                },
                last_name: {
                    type: DataTypes.STRING,
                    allowNull: false,
                },
                created_at: {
                    type: DataTypes.DATE,
                    allowNull: true,
                    defaultValue: DataTypes.NOW,
                },
                updated_at: {
                    type: DataTypes.DATE,
                    allowNull: true,
                },
                deleted_at: {
                    type: DataTypes.DATE,
                    allowNull: true,
                },
                /* auto-generated definitions */
                fullName: { // will not be overwritten
                    type: DataTypes.VIRTUAL,
                    get() {
                        return `${this.first_name} ${this.last_name}`;
                    },
                },
                hasTasks: { // will not be overwritten
                    type: DataTypes.VIRTUAL,
                    get() {
                        if (this.tasks) {
                            return this.tasks.length > 0;
                        }
                    },
                },
            },
            {
                sequelize,
                indexes: [
                    /* auto-generated indexes */
                    {
                        name: 'users_email_key',
                        unique: true,
                        fields: ['email'],
                    },
                    { name: 'users_first_name', fields: ['first_name'] },
                    { name: 'users_last_name', fields: ['last_name'] },
                    { name: 'users_pkey', unique: true, fields: ['id'] },
                    /* auto-generated indexes */
                ],
            },
        );
    }
}

```

## 使用后继型标注的示例输出

```
import {
    /* auto-generated sequelize imports */
    PrimaryKey,
    AutoIncrement,
    AllowNull,
    Column,
    Default,
    DataType as DataTypes,
    HasMany,
    /* auto-generated sequelize imports */
    Table,
    Model,
} from 'sequelize-typescript';
/* auto-generated imports */
import { phones } from './phones';
import { user_roles } from './user_roles';
/* auto-generated imports */
import { Optional } from 'sequelize';

type usersAttributeKeys =
    /* auto-generated attributes */
    | 'id'
    | 'email'
    | 'first_name'
    | 'last_name'
    | 'created_at'
    | 'updated_at'
    | 'deleted_at';
/* auto-generated attributes */

export type usersAttributes = Pick<users, usersAttributeKeys>;

export type usersOptionalAttributes =
    /* auto-generated optional attributes */
    'id';
/* auto-generated optional attributes */

export type usersCreationAttributes = Optional<
    usersAttributes,
    usersOptionalAttributes
>;

@Table({
    indexes: [
        /* auto-generated indexes */
        { name: 'users_email_key', unique: true, fields: ['email'] },
        { name: 'users_first_name', fields: ['first_name'] },
        { name: 'users_last_name', fields: ['last_name'] },
        { name: 'users_pkey', unique: true, fields: ['id'] },
        /* auto-generated indexes */
    ],
})
export class users
    extends Model<usersAttributes, usersCreationAttributes>
    implements usersAttributes
{
    /* auto-generated properties */
    @PrimaryKey
    @AutoIncrement
    @AllowNull(false)
    @Column(DataTypes.INTEGER)
    declare id: number;

    @AllowNull(false)
    @Column(DataTypes.STRING)
    declare email: string;

    @AllowNull(false)
    @Column(DataTypes.STRING)
    declare first_name: string;

    @AllowNull(false)
    @Column(DataTypes.STRING)
    declare last_name: string;

    @Default(DataTypes.NOW)
    @AllowNull(true)
    @Column(DataTypes.DATE)
    declare created_at?: Date;

    @AllowNull(true)
    @Column(DataTypes.DATE)
    declare updated_at?: Date;

    @AllowNull(true)
    @Column(DataTypes.DATE)
    declare deleted_at?: Date;
    /* auto-generated properties */

    /* auto-generated associations */
    @HasMany(() => phones, 'user_id')
    declare phones: phones[];

    @HasMany(() => user_roles, 'user_id')
    declare user_roles: user_roles[];
    /* auto-generated associations */
}
```

## 使用 @sequelize/ core( 第7版, α) 的示例输出

```
import {
    /* auto-generated sequelize imports */
    PrimaryKey,
    AutoIncrement,
    NotNull,
    Attribute,
    AllowNull,
    Default,
    HasMany,
    /* auto-generated sequelize imports */
    Table,
} from '@sequelize/core/decorators-legacy';
/* auto-generated imports */
import { phones } from './phones';
import { user_roles } from './user_roles';
/* auto-generated imports */
import { Model, DataTypes } from '@sequelize/core';

type usersAttributeKeys =
    /* auto-generated attributes */
    | 'id'
    | 'email'
    | 'first_name'
    | 'last_name'
    | 'created_at'
    | 'updated_at'
    | 'deleted_at';
/* auto-generated attributes */

export type usersAttributes = Pick<users, usersAttributeKeys>;

export type usersOptionalAttributes =
    /* auto-generated optional attributes */
    'id';
/* auto-generated optional attributes */

export type usersCreationAttributes = Omit<
    usersAttributes,
    usersOptionalAttributes
> &
    Partial<Pick<usersAttributes, usersOptionalAttributes>>;

@Table({
    indexes: [
        /* auto-generated indexes */
        { name: 'users_email_key', unique: true, fields: ['email'] },
        { name: 'users_first_name', fields: ['first_name'] },
        { name: 'users_last_name', fields: ['last_name'] },
        { name: 'users_pkey', unique: true, fields: ['id'] },
        /* auto-generated indexes */
    ],
})
export class users
    extends Model<usersAttributes, usersCreationAttributes>
    implements usersAttributes
{
    /* auto-generated properties */
    @PrimaryKey
    @AutoIncrement
    @NotNull
    @Attribute(DataTypes.INTEGER)
    declare id: number;

    @NotNull
    @Attribute(DataTypes.STRING)
    declare email: string;

    @NotNull
    @Attribute(DataTypes.STRING)
    declare first_name: string;

    @NotNull
    @Attribute(DataTypes.STRING)
    declare last_name: string;

    @Default(DataTypes.NOW)
    @AllowNull
    @Attribute(DataTypes.DATE)
    declare created_at?: Date;

    @AllowNull
    @Attribute(DataTypes.DATE)
    declare updated_at?: Date;

    @AllowNull
    @Attribute(DataTypes.DATE)
    declare deleted_at?: Date;
    /* auto-generated properties */

    /* auto-generated associations */
    @HasMany(() => phones, 'user_id')
    declare phones: phones[];

    @HasMany(() => user_roles, 'user_id')
    declare user_roles: user_roles[];
    /* auto-generated associations */
}
```

## 配置选项

```
export type JoinTables =
  | string[]
  | Record<string, true | string[] | string[][]>;

export interface GeneratorOptions {
  /** Add null to nullable fields (ex: column?: string | null;) */
  addNullToTypes?: boolean;
  /** Case of file names (default original)*/
  caseFile?: CaseFileOption;
  /** Case of model names (default original)*/
  caseModel?: CaseOption;
  /** Case of property names (default original)*/
  caseProp?: CaseOption;
  /** Database name */
  database?: string;
  /** Database dialect */
  dialect: Dialect;
  /** Dialect-specific options */
  dialectOptions?: {
    options?: any;
  };
  /** Where to write the model files */
  directory: string;
  /** Database host (default localhost)*/
  host?: string;
  /** Whether to avoid creating alias property in relations */
  noAlias?: boolean;
  /** Add explicit DO NOT EDIT warnings to generated headers and region markers */
  generatedWarnings?: boolean;
  /** Whether to skip writing the init-models file */
  noInitModels?: boolean;
  /** Database password */
  password?: string;
  /** Database port (default mysql: 3306, postgres: 5432, mssql: 1433)*/
  port?: number;
  /** Database schema to export */
  schema?: string;
  /** Whether to singularize model names (default false)*/
  singularize?: boolean;
  /** Tables to skip exporting */
  skipTables?: string[];
  /** Fields to skip exporting */
  skipFields?: string[];
  /** File where database is stored (sqlite only) */
  storage?: string;
  /** Tables to export (default all) */
  tables?: string[];
  /** Database username */
  username?: string;
  /** Whether to export views (default false) */
  views?: boolean;
  /** Primary Key Suffixes to trim (default "id") */
  pkSuffixes?: string[];
  /** Library that output files to be written using (default sequelize)*/
  targetLib?: "sequelize" | "sequelize-typescript" | "@sequelize/core";
  /** Array of replacements to be applied after formatting across all files using file.replace(replacement[0], replacement[1]) */
  replacements?: [RegExp, string][];
  /** Array of tables to be considered as join tables. All foreign keys in these tables will be related to each other via belongsToMany relationship (can also be a record or table names as keys. the value can be either true for all foreign keys, an array of foreign keys, or an array of array of foreign keys to establish specific relationships)*/
  joinTables?: JoinTables;
  /** After the files are processed, prettier will be run to format each file before it is written. Use this option to configure prettier formatting to reflect your prettier config. (default is prettier default options) */
  prettierOptions?: Omit<Options, "parser" | "semi">;
}
```

## 常见问题

### @bitbean/generate-sequelize 是什么？

复制模型的代码生成器

### 如何安装 @bitbean/generate-sequelize？

在项目目录运行 npm install @bitbean/generate-sequelize，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：sequelize（\>3\.30\.0）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。它还提供命令行工具 generate-sequelize，可以用 npx generate-sequelize 直接运行。

### @bitbean/generate-sequelize 支持 TypeScript 吗？

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

### @bitbean/generate-sequelize 可以商用吗？

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

### @bitbean/generate-sequelize 的下载量有多少？

根据 npm 官方下载统计，@bitbean/generate-sequelize 在 2026/10/08 – 2026/11/06 这 30 天内被下载 9,108 次，日均约 304 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @bitbean/generate-sequelize 还在维护吗？

最新版本 1\.3\.1 发布于 2026/07/28（3 个月前）；至今共发布 9 个版本，其中过去 12 个月发布了 3 个；首次发布于 2025/04/24。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

