alioth/star-tune/drizzle.config.ts
2025-05-30 18:37:21 +08:00

75 lines
2.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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;