You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS TypeORM生成迁移失败:提示无Schema变化,疑版本或路径问题

解决TypeORM迁移生成提示"No changes in database schema were found"的问题

针对你遇到的问题,核心原因是glob路径匹配失败,导致TypeORM无法识别实体文件,进而认为数据库 schema 无变化。结合你的环境(Windows 11 + TypeORM 0.3.12),可以按以下步骤排查修复:

1. 修正实体与迁移文件的路径配置

直接用相对路径或绝对路径替代模糊的glob模式,避免Windows路径分隔符和TypeORM版本差异带来的匹配问题:

方案一:使用绝对路径(最可靠)

借助Node的__dirname和path.join生成绝对路径,消除相对路径的歧义:

import * as dotenv from 'dotenv';
dotenv.config();
import { DataSource, DataSourceOptions } from "typeorm";
import { join } from 'path';

export const dataSourceOptions : DataSourceOptions = {
    type: 'mysql',
    host: process.env.DB_HOST,
    port: parseInt(process.env.DB_PORT),
    database: process.env.DB_NAME,
    username: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    entities: [join(__dirname, '../src/**/*.entity.js')],
    migrations: [join(__dirname, './migrations/*.js')],
}

const dataSource = new DataSource(dataSourceOptions);
export default dataSource;

方案二:调整相对路径(适配dist目录结构)

如果你坚持用相对路径,确保路径是相对于data-source.js所在位置(dist/db/):

  • 实体文件编译后在dist/src/下,所以相对路径为../src/**/*.entity.js
  • 迁移文件在dist/db/migrations/下,相对路径为./migrations/*.js

修改后的配置:

export const dataSourceOptions : DataSourceOptions = {
    // ...其他配置
    entities: ["../src/**/*.entity.js"],
    migrations:["./migrations/*.js"],
}

2. 移除glob中的.ts后缀

执行npm run build后,dist目录下只有编译后的.js文件,保留.ts后缀会导致TypeORM匹配不到任何文件,所以直接删除.ts的匹配规则。

3. 清理dist目录并重新构建

旧的编译文件可能残留缓存,执行以下命令清理后重新构建:

# Windows系统
rd /s /q dist && npm run build

# 若使用Git Bash等类Unix终端
rm -rf dist && npm run build

4. 验证路径匹配是否正确

可以用glob包测试路径是否能匹配到目标文件:

  1. 安装glob:npm install glob --save-dev
  2. 在dist/db/目录下创建测试文件test-glob.js:
const glob = require('glob');
console.log('匹配到的实体文件:');
glob.sync('../src/**/*.entity.js').forEach(file => console.log(file));

console.log('\n匹配到的迁移文件:');
glob.sync('./migrations/*.js').forEach(file => console.log(file));
  1. 执行node test-glob.js,如果输出包含你的Usuario.entity.js和迁移文件,说明路径配置正确。

补充:TypeORM 0.3.12的细节变化

0.3.12版本对glob匹配的逻辑做了微调,相比0.3.11更严格,模糊的路径模式(比如跨目录的**/*.entity{.ts,.js})在Windows下更容易失效,因此推荐使用绝对路径方案。

内容的提问来源于stack exchange,提问作者pdh28907

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 07:27:01