75 lines
2.8 KiB
TypeScript
75 lines
2.8 KiB
TypeScript
/**
|
||
* Drizzle ORM 配置文件
|
||
*
|
||
* 用于配置数据库连接、迁移和 schema 生成
|
||
* 支持从环境变量读取配置
|
||
*/
|
||
import type { Config } from 'drizzle-kit';
|
||
import * as dotenv from 'dotenv';
|
||
|
||
// 加载环境变量
|
||
dotenv.config();
|
||
|
||
// 1. `makeSQL` (drizzle-kit generate):
|
||
// - 作用:根据 `schema.ts` 文件中的定义生成 SQL 迁移文件
|
||
// - 具体功能:
|
||
// - 比较当前数据库状态和 schema 定义的差异
|
||
// - 在 `src/drizzle` 目录下生成新的迁移文件(如 `0000_green_doorman.sql`)
|
||
// - 同时更新 `meta/_journal.json` 记录迁移历史
|
||
// - 使用场景:当你修改了 `schema.ts` 中的表结构定义后,需要生成对应的 SQL 迁移文件
|
||
// - 执行命令:`npm run makeSQL`
|
||
|
||
// 2. `makeEntity` (drizzle-kit introspect):
|
||
// - 作用:从现有数据库反向生成 TypeScript 实体定义
|
||
// - 具体功能:
|
||
// - 扫描数据库中的表结构
|
||
// - 自动生成对应的 TypeScript 类型定义
|
||
// - 在 `src/drizzle/schema.ts` 中生成表结构代码
|
||
// - 使用场景:
|
||
// - 当你有一个现成的数据库,想要快速生成对应的 TypeScript 类型定义
|
||
// - 数据库表结构发生变化,需要更新 TypeScript 定义
|
||
// - 执行命令:`npm run makeEntity`
|
||
|
||
// 3. `syncDB` (drizzle-kit migrate):
|
||
// - 作用:将生成的 SQL 迁移文件同步到数据库
|
||
// - 具体功能:
|
||
// - 读取 `src/drizzle` 目录下的迁移文件
|
||
// - 按照迁移历史记录的顺序执行 SQL 语句
|
||
// - 将数据库结构更新到最新状态
|
||
// - 使用场景:
|
||
// - 当你生成了新的迁移文件后,需要将这些更改应用到数据库
|
||
// - 团队协作时,需要同步其他人的数据库更改
|
||
// - 执行命令:`npm run syncDB`
|
||
|
||
// 典型的工作流程是:
|
||
// 1. 修改 `schema.ts` 中的表结构定义
|
||
// 2. 运行 `makeSQL` 生成迁移文件
|
||
// 3. 检查生成的 SQL 文件是否正确
|
||
// 4. 运行 `syncDB` 将更改同步到数据库
|
||
|
||
// 如果你是从现有数据库开始,可以:
|
||
// 1. 运行 `makeEntity` 生成 TypeScript 定义
|
||
// 2. 根据需要修改生成的代码
|
||
// 3. 运行 `makeSQL` 和 `syncDB` 同步更改
|
||
|
||
// 这些命令都是通过 `drizzle-kit` 工具提供的,它提供了完整的数据库迁移和类型生成功能。
|
||
|
||
|
||
export default {
|
||
schema: './src/drizzle/schema.ts',
|
||
out: './src/drizzle',
|
||
dialect: 'mysql',
|
||
dbCredentials: {
|
||
host: process.env.DB_HOST || 'localhost',
|
||
port: Number(process.env.DB_PORT) || 3306,
|
||
user: process.env.DB_USER || 'root',
|
||
password: process.env.DB_PASSWORD || 'root',
|
||
database: process.env.DB_NAME || 'star_tune',
|
||
},
|
||
verbose: true,
|
||
strict: true,
|
||
introspect: {
|
||
// 启用驼峰命名
|
||
casing: 'camel',
|
||
},
|
||
} satisfies Config; |