Sequelize CLI 配置与使用完全指南
【免费下载链接】cli The Sequelize CLI 项目地址: https://gitcode.com/gh_mirrors/cli10/cli
前言
Sequelize CLI 是 Sequelize ORM 的配套命令行工具,主要用于数据库迁移( migrations )和种子数据( seeders )管理。本文将详细介绍 Sequelize CLI 的各种配置选项和使用方法,帮助开发者更好地管理数据库变更。
基础配置方式
Sequelize CLI 提供了多种灵活的配置方式,可以根据项目需求选择最适合的一种。
1. 命令行参数配置
最直接的方式是在执行命令时通过命令行参数指定配置。例如:
sequelize db:migrate --config config/database.json --migrations-path db/migrations
这种方式适合临时性的配置变更,但对于需要频繁使用的配置则不够高效。
2. .sequelizerc 配置文件
对于需要长期使用的配置,推荐使用 .sequelizerc 文件。这个文件可以放在项目根目录下,支持 JSON 或 Node.js 脚本格式。
Node.js 格式示例:
const path = require('path');
module.exports = {
'config': path.resolve('config', 'database.json'),
'migrations-path': path.resolve('db', 'migrations'),
'seeders-path': path.resolve('db', 'seeders'),
'models-path': path.resolve('src', 'models')
};
这种方式的优势在于:
配置集中管理,便于维护可以使用 Node.js 的动态功能支持路径解析,避免硬编码
3. 数据库连接配置
数据库连接配置通常存储在 config/config.json 或 config/config.js 文件中,支持多种环境配置:
{
"development": {
"username": "root",
"password": null,
"database": "app_development",
"host": "127.0.0.1",
"dialect": "mysql",
"port": 3306
},
"test": {
"username": "root",
"password": null,
"database": "app_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "app_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
或者使用连接字符串格式:
{
"development": {
"url": "mysql://root:password@localhost:3306/app_development",
"dialect": "mysql"
}
}
高级配置选项
1. 环境变量配置
在生产环境中,推荐使用环境变量来配置数据库连接:
// config/config.js
module.exports = {
production: {
use_env_variable: "DATABASE_URL",
dialect: "postgres",
dialectOptions: {
ssl: {
require: true,
rejectUnauthorized: false
}
}
}
};
或者在配置文件中直接引用环境变量:
module.exports = {
production: {
username: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME,
host: process.env.DB_HOST,
dialect: "postgres"
}
};
2. SSL 连接配置
对于需要 SSL 加密的连接,可以这样配置:
{
"production": {
"dialect": "postgres",
"ssl": true,
"dialectOptions": {
"ssl": {
"require": true,
"rejectUnauthorized": false
}
}
}
}
3. 方言特定选项
不同数据库方言(dialect)可能有特定的配置选项:
module.exports = {
development: {
dialect: 'mysql',
dialectOptions: {
// MySQL 特定选项
connectTimeout: 10000,
// 其他选项...
}
}
};
迁移与种子存储配置
迁移存储配置
默认情况下,Sequelize 会在数据库中创建一个 SequelizeMeta 表来记录已执行的迁移。你可以自定义这一行为:
{
"development": {
// ...其他配置
"migrationStorage": "json", // 可选: sequelize, json, none
"migrationStoragePath": "custom-meta.json", // 仅当使用 json 存储时需要
"migrationStorageTableName": "custom_migrations", // 仅当使用 sequelize 存储时需要
"migrationStorageTableSchema": "custom_schema" // PostgreSQL 专用
}
}
存储类型说明:
sequelize:在数据库表中记录迁移(默认)json:在 JSON 文件中记录迁移none:不记录迁移历史(不推荐)
种子存储配置
种子数据存储配置与迁移类似:
{
"development": {
// ...其他配置
"seederStorage": "json", // 可选: sequelize, json, none
"seederStoragePath": "custom-seed-data.json", // 仅当使用 json 存储时需要
"seederStorageTableName": "custom_seeders" // 仅当使用 sequelize 存储时需要
}
}
迁移文件结构
Sequelize 迁移文件遵循特定结构:
module.exports = {
up: async (queryInterface, Sequelize) => {
// 迁移逻辑
await queryInterface.createTable('Users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
createdAt: {
type: Sequelize.DATE,
allowNull: false
},
updatedAt: {
type: Sequelize.DATE,
allowNull: false
}
});
},
down: async (queryInterface) => {
// 回滚逻辑
await queryInterface.dropTable('Users');
}
};
注意事项:
up 和 down 方法必须返回 Promise可以通过 queryInterface.sequelize 访问 Sequelize 实例迁移应该是幂等的,可以安全地多次执行
最佳实践建议
环境隔离:始终为不同环境(开发、测试、生产)配置独立的数据库连接敏感信息保护:生产环境密码等敏感信息应通过环境变量配置版本控制:将迁移文件和种子文件纳入版本控制系统备份策略:在执行重要迁移前备份数据库小步迁移:每个迁移文件只做一件事,保持简单明确测试迁移:在测试环境验证迁移脚本后再应用到生产环境
常见问题解答
Q:如何添加迁移时间戳?
从 v2.8.0 开始,可以运行以下命令为迁移记录添加时间戳:
sequelize db:migrate:schema:timestamps:add
Q:如何从旧版迁移到新版?
如果还在使用 v2 之前的旧模式,可以运行:
sequelize db:migrate:old_schema
Q:如何查看已应用的迁移?
对于数据库存储方式:
SELECT * FROM "SequelizeMeta";
对于 JSON 存储方式:
cat sequelize-meta.json
通过本文的介绍,你应该已经掌握了 Sequelize CLI 的核心配置和使用方法。合理配置和使用 Sequelize CLI 可以大大简化数据库变更管理流程,提高开发效率。
【免费下载链接】cli The Sequelize CLI 项目地址: https://gitcode.com/gh_mirrors/cli10/cli