TypeORM无法检测数据库schema变更,无法生成迁移文件问题求助
TypeORM无法检测数据库schema变更,无法生成迁移文件问题求助
嘿,我之前在TypeORM 0.3.x版本里也踩过一模一样的坑,给你梳理几个最可能的排查方向,你一个个试下:
- 先盯紧你的数据源配置文件:确保里面的
entities路径完全正确,能精准匹配到你修改过的那个实体。比如是不是用了相对路径但层级错了,或者glob模式(比如src/**/*.entity.ts)没写对?要是TypeORM连你改的实体都没读到,肯定检测不到变更。 - 确认数据库连接的目标环境:别犯低级错误——你生成迁移时用的数据源,是不是连到了之前用
synchronize: true同步过的那个数据库?要是不小心连到了测试库或者其他环境的库,而那个库的schema已经和你当前实体一致,自然不会生成新迁移。 - 检查你实体的变更是否真的会影响数据库schema:比如你是不是只改了实体里的非持久化属性(比如加了个没有
@Column装饰器的辅助字段),或者改了属性名但因为用了@Column({name: 'xxx'})指定了列名,数据库列名根本没变?这种情况TypeORM确实不会触发迁移生成。 - 清掉TypeORM的元数据缓存:有时候TypeORM会缓存旧的实体信息,导致读不到新修改。你可以试试删掉项目根目录下的
.typeorm缓存文件夹(如果存在的话),或者在生成命令里加--cache false参数,改成:npx typeorm-ts-node-commonjs migration:generate -d path/to/datasource path/to/migration --cache false - 排查
synchronize: true的残留影响:会不会你改完实体后,不小心启动过项目?因为synchronize: true会自动把数据库schema同步成和实体一致,这时候实体和数据库已经匹配了,自然生成不了迁移。这种情况你得先把数据库里对应的表结构还原到修改前的状态,再跑生成命令。 - 检查TS配置是否适配命令:你用的是
typeorm-ts-node-commonjs命令,那你的tsconfig.json里得把module设为CommonJS,target设为ES6或更高,不然ts-node加载实体文件时可能出问题,导致TypeORM无法正确识别实体变更。
内容来源于stack exchange
相关产品推荐
相关产品推荐

