nest build报错:typeorm无DataSource、DataSourceOptions导出成员
问题原因
执行nest build时提示找不到DataSource、DataSourceOptions导出,核心是TypeORM与@nestjs/typeorm的版本适配错位:
DataSource、DataSourceOptions是TypeORM 0.3.x版本新增的API,0.2.x全系列版本均未导出这两个成员- @nestjs/typeorm从9.0.0版本开始才适配TypeORM 0.3.x,内部会引用上述两个类型;8.x版本适配TypeORM 0.2.x,内部使用旧版
Connection、ConnectionOptions类型,不会触发该报错
你package.json中声明的版本看似匹配,实际是依赖安装时出现了版本漂移:要么@nestjs/typeorm实际安装版本≥9.0.0,要么typeorm实际安装版本未达到0.3.x,二者对应关系不匹配。
修复方案
两种方案二选一即可,根据自身项目需求选择。
方案1:保留TypeORM 0.2.x版本(无需改动现有ormconfig逻辑)
你当前的ormconfig.ts是0.2.x版本的标准写法,不想调整配置可以选这个方案:
- 卸载现有不匹配的依赖
npm uninstall typeorm @nestjs/typeorm
- 安装版本严格对应的依赖组合,锁死版本避免自动升级导致错位
npm install typeorm@0.2.45 @nestjs/typeorm@8.0.4 --save-exact
- 清除缓存和旧依赖后重新安装,再执行构建
rm -rf node_modules package-lock.json npm install nest build
方案2:升级到TypeORM 0.3.x(官方长期维护版本)
如果需要使用TypeORM 0.3的新特性,可以选择升级,同步调整配置即可:
- 卸载旧依赖,安装适配的新版本组合
npm uninstall typeorm @nestjs/typeorm npm install typeorm@0.3.20 @nestjs/typeorm@9.0.1 --save-exact
- 修改ormconfig.ts,导出DataSource实例适配0.3版本规范
import { DataSource, DataSourceOptions } from 'typeorm'; const DATABASE_TYPE = process.env.DATABASE_TYPE || 'postgres'; const DATABASE_URL = process.env.DATABASE_URL; const DATABASE_SSL = process.env.DATABASE_SSL !== undefined ? process.env.DATABASE_SSL === 'true' : true; const DATABASE_SSL_CA = process.env.DATABASE_SSL_CA; const root = __dirname; export const dataSourceOptions: DataSourceOptions = { type: DATABASE_TYPE as any, url: DATABASE_URL, schema: 'qcxapp', entities: [`${root}/**/*.entity.{js,ts}`, `${root}/**/*.model.{js,ts}`], migrations: [`${root}/database/migrations/*.{js,ts}`], synchronize: false, ssl: DATABASE_SSL_CA ? { ca: DATABASE_SSL_CA, rejectUnauthorized: false } : DATABASE_SSL, }; export default new DataSource(dataSourceOptions);
- 调整根模块中TypeORM的引入方式,加载适配后的配置
// app.module.ts import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; import { dataSourceOptions } from './ormconfig'; @Module({ imports: [ TypeOrmModule.forRoot(dataSourceOptions), // 其余业务模块 ] }) export class AppModule {}
- 重新执行构建命令即可
nest build
注:你当前的tsconfig.json配置没有问题,不需要额外修改。
内容的提问来源于stack exchange,提问作者JN_newbie
相关产品推荐
相关产品推荐

