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

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中的路径别名:

  1. 确保tsconfig.json已配置路径别名:
{
  "compilerOptions": {
    "baseUrl": "./",
    "paths": {
      "src/*": ["src/*"]
    }
  }
}
  1. 安装依赖:
npm install --save-dev tsconfig-paths
  1. 修改迁移命令,添加路径解析注册参数:
    在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:12:35