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

NestJS与TypeORM更新问题:glob 8.1.0版本适配异常

解决方案

1. 用path模块统一处理路径

Node.js的path模块会自动适配系统路径规则,用它替代手动拼接路径能避免分隔符冲突问题:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import * as path from 'path';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      // 你的数据库连接配置...
      entities: [path.join(__dirname, '**', '*.entity{.ts,.js}')],
    }),
  ],
})
export class AppModule {}

path.join会自动根据Windows环境生成兼容的路径,同时glob 8.x内部会将路径转为/格式,不会出现匹配失效。

2. 按环境区分实体文件后缀

生产环境下项目会编译为JS文件,继续匹配TS文件会导致找不到实体。可以通过环境变量区分后缀:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import * as path from 'path';

const isProd = process.env.NODE_ENV === 'production';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      // 其他配置...
      entities: [path.join(__dirname, '**', `*.entity.${isProd ? 'js' : 'ts'}`)],
    }),
  ],
})
export class AppModule {}

3. 显式配置glob匹配参数

TypeORM支持通过entitiesGlobOptions给底层glob传递配置,强制生成绝对路径或指定工作目录:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      // 其他配置...
      entities: ['**/*.entity{.ts,.js}'],
      entitiesGlobOptions: {
        cwd: __dirname,
        absolute: true,
      },
    }),
  ],
})
export class AppModule {}

absolute: true确保glob返回的是绝对路径,避免TypeORM解析时出现路径偏差。

4. 临时降级glob版本(应急方案)

如果以上方法都无效,可以强制将glob降级到7.1.3版本:

  • 用npm的话,在package.json中添加:
{
  "scripts": {
    "preinstall": "npx npm-force-resolutions"
  },
  "resolutions": {
    "glob": "7.1.3"
  }
}

然后执行npm install。

  • 用yarn的话,直接在package.json中添加:
{
  "resolutions": {
    "glob": "7.1.3"
  }
}

然后执行yarn install。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 14:40:44