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

Nx+NestJS+TypeORM数据库迁移配置报错求助

问题:Nx 单体仓库中 NestJS+TypeORM 迁移配置 TS6059 错误

在Nx单体仓库的NestJS+TypeORM应用中配置数据库迁移时,运行build-migration-config触发TS6059错误——因Post实体存放于Nx lib目录,不在rootDir指定的apps/api路径下,导致编译失败。求可行解决方案,包括其他迁移实现思路。

当前Nx目标配置

"build-migration-config": {
  "executor": "@nx/js:tsc",
  "outputs": ["{options.outputPath}"],
  "options": {
    "outputPath": "dist/apps/typeorm-migration",
    "main": "apps/api/src/typeorm.config.ts",
    "tsConfig": "apps/api/tsconfig.app.json"
  }
},
"typeorm-generate-migrations": {
  "executor": "nx:run-commands",
  "outputs": ["{options.outputPath}"],
  "options": {
    "cwd": "apps/api/src/migrations",
    "commands": [
      "npx typeorm -d ../../../../dist/apps/typeorm-migration/src/app/typeorm.config.js migration:generate"
    ],
    "outputPath": "dist/apps/typeorm-migration"
  },
  "dependsOn": ["build-migration-config"]
},
"typeorm-run-migrations": {
  "executor": "nx:run-commands",
  "outputs": ["{options.outputPath}"],
  "options": {
    "cwd": "apps/api/src/migrations",
    "commands": [
      "npx typeorm -d ../../../../dist/apps/typeorm-migration/src/app/typeorm.config.js migration:run"
    ]
  },
  "dependsOn": ["build-migration-config"]
}

错误信息

> nx run api:build-migration-config

Compiling TypeScript files for project "api"...
apps/api/src/app/app.module.ts:6:40 - error TS6059: File '/Users/user/demos/nx-typeorm-migration-demo/libs/shared/util/models/src/index.ts' is not under 'rootDir' '/Users/user/demos/nx-typeorm-migration-demo/apps/api'. 'rootDir' is expected to contain all source files.

6 import { SharedUtilModelsModule } from '@typeorm-migrations/shared/util/models';
                                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
libs/shared/util/models/src/index.ts:1:15 - error TS6059: File '/Users/user/demos/nx-typeorm-migration-demo/libs/shared/util/models/src/lib/shared-util-models.module.ts' is not under 'rootDir' '/Users/user/demos/nx-typeorm-migration-demo/apps/api'. 'rootDir' is expected to contain all source files.

1 export * from './lib/shared-util-models.module';
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
libs/shared/util/models/src/lib/shared-util-models.module.ts:3:22 - error TS6059: File '/Users/user/demos/nx-typeorm-migration-demo/libs/shared/util/models/src/lib/post.entity.ts' is not under 'rootDir' '/Users/user/demos/nx-typeorm-migration-demo/apps/api'. 'rootDir' is expected to contain all source files.
  The file is in the program because:
    Imported via './post.entity' from file '/Users/user/demos/nx-typeorm-migration-demo/libs/shared/util/models/src/lib/shared-util-models.module.ts'
    Imported via './lib/post.entity' from file '/Users/user/demos/nx-typeorm-migration-demo/libs/shared/util/models/src/index.ts'
    Root file specified for compilation

3 import { Post } from './post.entity';
                       ~~~~~~~~~~~~~~~

  libs/shared/util/models/src/index.ts:2:15
    2 export * from './lib/post.entity';
                    ~~~~~~~~~~~~~~~~~~~
    File is included via import here.

解决方案

方案1:调整TS配置,包含Nx Lib文件

当前tsconfig.app.json的rootDir仅指向apps/api,无法识别lib目录下的实体文件。可以新建一个专门用于迁移的TS配置文件:

  1. 在apps/api下创建tsconfig.migration.json:
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "rootDir": "../../",
    "outDir": "../../dist/apps/typeorm-migration",
    "module": "commonjs",
    "target": "ES2020",
    "esModuleInterop": true
  },
  "include": [
    "src/**/*",
    "../../libs/shared/util/models/src/**/*"
  ]
}
  1. 修改build-migration-config的tsConfig指向新文件:
"build-migration-config": {
  "executor": "@nx/js:tsc",
  "outputs": ["{options.outputPath}"],
  "options": {
    "outputPath": "dist/apps/typeorm-migration",
    "main": "apps/api/src/typeorm.config.ts",
    "tsConfig": "apps/api/tsconfig.migration.json"
  }
}

方案2:用ts-node直接运行迁移,跳过单独编译

无需单独编译typeorm.config.ts,直接用ts-node加载TS配置并处理路径映射:

  1. 安装依赖:
npm install ts-node tsconfig-paths --save-dev
  1. 修改Nx迁移目标,移除对build-migration-config的依赖:
"typeorm-generate-migrations": {
  "executor": "nx:run-commands",
  "options": {
    "cwd": "apps/api",
    "commands": [
      "npx ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -d src/typeorm.config.ts migration:generate src/migrations/$NAME"
    ]
  }
},
"typeorm-run-migrations": {
  "executor": "nx:run-commands",
  "options": {
    "cwd": "apps/api",
    "commands": [
      "npx ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js -d src/typeorm.config.ts migration:run"
    ]
  }
}

运行时可通过nx run api:typeorm-generate-migrations --args="--name=InitPosts"指定迁移名称。

方案3:将迁移配置封装为单独Nx Lib

把typeorm.config.ts和实体依赖打包成独立的Nx Lib,确保编译时包含所有必要文件:

  1. 新建Lib:
nx generate @nx/js:lib typeorm-config --buildable
  1. 将apps/api/src/typeorm.config.ts移至libs/typeorm-config/src/lib/,并调整实体导入路径,确保能正确引用shared/util/models中的实体。

  2. 配置libs/typeorm-config/tsconfig.lib.json,确保include包含依赖的lib:

"include": [
  "src/**/*",
  "../shared/util/models/src/**/*"
]
  1. 修改Nx迁移目标,编译该Lib后使用其产物:
"build-migration-config": {
  "executor": "@nx/js:tsc",
  "outputs": ["{options.outputPath}"],
  "options": {
    "outputPath": "dist/libs/typeorm-config",
    "main": "libs/typeorm-config/src/lib/typeorm.config.ts",
    "tsConfig": "libs/typeorm-config/tsconfig.lib.json"
  }
},
"typeorm-generate-migrations": {
  "executor": "nx:run-commands",
  "options": {
    "cwd": "apps/api/src/migrations",
    "commands": [
      "npx typeorm -d ../../../../dist/libs/typeorm-config/src/lib/typeorm.config.js migration:generate"
    ]
  },
  "dependsOn": ["build-migration-config"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:50:56