NestJS项目中TypeORM执行迁移时出现导入错误
解决NestJS TypeORM迁移中Decimal转换器的导入错误
问题原因
使用ts-node-commonjs执行迁移时,TypeORM加载实体文件无法解析src/开头的绝对导入路径——这是因为NestJS默认tsconfig.json中的路径别名(如src/*)在CommonJS模式下未被ts-node正确识别,导致模块查找失败。
解决方案
方案1:改用相对路径导入转换器
直接修改实体中的导入语句,用相对路径替代绝对路径,避免依赖路径别名:
// 原导入 // import { DecimalTransformer } from "src/core/transformers/Decimal.transformer"; // 改为相对路径(根据实体所在目录调整层级) import { DecimalTransformer } from "../../core/transformers/Decimal.transformer";
方案2:配置ts-node识别路径别名
若想保留绝对路径导入,需让ts-node-commonjs解析tsconfig.json中的路径别名:
- 确保
tsconfig.json已配置路径别名:
{ "compilerOptions": { "baseUrl": "./", "paths": { "src/*": ["src/*"] } } }
- 安装依赖:
npm install --save-dev tsconfig-paths
- 修改迁移命令,添加路径解析注册参数:
在package.json中更新migration:run脚本:
{ "scripts": { "migration:run": "npm run typeorm migration:run -- -r tsconfig-paths/register -d src/database/migration-data-source.ts" } }
或直接在migration-data-source.ts顶部引入解析器:
import 'tsconfig-paths/register'; // 放在最顶部 import { ConfigService } from '@nestjs/config'; // ... 其他导入代码
方案3:检查文件大小写与命名
确认转换器文件名和导入语句的大小写完全一致(如Decimal.transformer.ts vs decimal.transformer.ts),Linux/macOS系统中文件名大小写敏感会直接导致模块找不到。
验证
修改后重新执行迁移命令:
npm run migration:run
内容的提问来源于stack exchange,提问作者mubashir
相关产品推荐
相关产品推荐

