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
相关产品推荐
相关产品推荐

