TypeORM执行迁移时提示“No migrations pending”问题求助
1. 路径大小写不匹配(最可能的原因)
你的迁移文件实际路径是src/Database/Migrations/(首字母大写),但ormconfig.ts中配置的迁移路径是src/database/migrations/*.ts(全小写)。在区分大小写的文件系统(如Linux/macOS)中,这会导致TypeORM无法匹配到迁移文件。
解决方案:
修改ormconfig.ts中的migrations配置项,与实际路径一致:
migrations: ['src/Database/Migrations/*.ts'],
2. 迁移文件结构/命名不符合要求
TypeORM要求每个迁移文件必须导出一个继承自MigrationInterface的类,且类名需与文件名的后缀部分匹配(驼峰格式)。例如:
- 文件名:
1663525805095-add_users.ts - 对应类名:
AddUsers1663525805095
检查点:
确认你的迁移文件符合以下结构:
import { MigrationInterface, QueryRunner } from "typeorm"; export class AddUsers1663525805095 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { // 迁移逻辑 } public async down(queryRunner: QueryRunner): Promise<void> { // 回滚逻辑 } }
3. TypeORM CLI配置问题
3.1 验证迁移文件是否被发现
执行migration:show命令,查看TypeORM是否能检测到迁移文件:
yarn typeorm migration:show
如果输出为空,说明路径或文件结构存在问题;如果能列出迁移但显示未执行,再排查执行逻辑。
3.2 检查DataSource导出方式
部分版本的TypeORM CLI对默认导出的支持可能存在问题,可尝试修改ormconfig.ts的导出方式:
// 替换export default source; export const dataSource = new DataSource({ // 原有配置 });
同时更新package.json中的typeorm脚本:
"typeorm": "typeorm-ts-node-commonjs -d ./ormconfig.ts#dataSource"
4. 环境变量与数据库连接验证
虽然你提到连接正常,但可临时硬编码数据库信息到ormconfig.ts中,排除环境变量加载异常的可能:
const source = new DataSource({ type: 'postgres', host: 'localhost', // 替换为你的Docker容器IP/主机名 port: 5432, username: 'your-user', password: 'your-pass', database: 'your-db', // 其他原有配置 });
之后重新执行yarn migrations:run,看是否能正常识别迁移。
5. 生成新迁移测试
生成一个全新的测试迁移,验证TypeORM的识别逻辑:
yarn typeorm migration:generate src/Database/Migrations/test-migration
执行完成后,再次运行yarn migrations:run。如果新迁移能被识别并执行,说明之前的迁移文件存在格式或命名问题;如果仍无法识别,继续排查路径或CLI配置。
6. 版本兼容性检查
确认@nestjs/typeorm与typeorm的版本兼容:
- 查看
package.json中的依赖版本,确保两者版本匹配(例如@nestjs/typeorm@10.x对应typeorm@0.3.x)。 - 若版本不匹配,升级/降级到兼容版本后重试。
内容的提问来源于stack exchange,提问作者Stol3nH4t

