TypeORM migration:run无法检测已生成迁移文件的问题咨询
TypeORM执行
migration:run提示“No migrations are pending”的排查方案 可能的原因及解决方法
1. 迁移文件路径配置错误
你的data-source.ts中migrations字段配置为__dirname + '/src/migrations',如果该文件位于src目录下,__dirname本身就指向src目录,拼接后会变成src/src/migrations,与实际迁移文件路径不符,导致TypeORM找不到迁移文件。
解决方法:
根据项目结构调整路径配置,示例:
// 若data-source.ts在src根目录,迁移文件在src/migrations下 migrations: [__dirname + '/migrations/**/*{.ts,.js}'], // 或使用glob模式的相对路径 migrations: ['src/migrations/**/*.ts'],
2. synchronize选项开启导致冲突
你的配置中synchronize: true,这个选项会自动将实体结构同步到数据库,相当于提前执行了迁移文件的变更逻辑。此时数据库表结构已经和实体一致,执行migration:run时自然会提示无待执行迁移。
解决方法:
将synchronize改为false,并重启应用:
synchronize: false,
注意:生产环境严禁开启
synchronize,可能造成数据丢失。
3. 迁移文件已被执行过
检查数据库中的typeorm_migrations表(默认表名),如果生成的迁移文件名称已存在于该表中,说明该迁移已执行过,不会重复触发。
解决方法:
- 若需重新执行,可先通过
migration:revert回滚后再运行migration:run; - 若确认是误记录,可删除表中对应记录后重新执行(操作前请备份数据)。
4. 执行命令未指定正确数据源文件
确保执行migration:run时指定了正确的data-source.ts路径,TS项目使用ts-node执行的命令示例:
npx typeorm-ts-node-commonjs migration:run -d src/data-source.ts
编译为JS文件后的执行命令:
npx typeorm migration:run -d dist/data-source.js
5. 迁移文件格式/命名不规范
TypeORM要求迁移文件遵循{timestamp}-{name}.ts的命名格式,且文件必须包含up和down方法。不符合规范的文件会被TypeORM忽略。
解决方法:
检查迁移文件的名称与结构,必要时重新生成:
npx typeorm-ts-node-commonjs migration:generate src/migrations/YourMigrationName -d src/data-source.ts
内容的提问来源于stack exchange,提问作者Vorasoda
相关产品推荐
相关产品推荐

